<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/c35e46e1ffea8f1f457f969fa3e62cf81256dcda">https://github.com/macports/macports-base/commit/c35e46e1ffea8f1f457f969fa3e62cf81256dcda</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new c35e46e1f delete old thread package
</span>c35e46e1f is described below

<span style='display:block; white-space:pre;color:#808000;'>commit c35e46e1ffea8f1f457f969fa3e62cf81256dcda
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Sep 7 21:43:03 2022 +1000

<span style='display:block; white-space:pre;color:#404040;'>    delete old thread package
</span>---
 vendor/thread                                   |     1 -
 vendor/thread2.7.3/ChangeLog                    |  1844 ----
 vendor/thread2.7.3/Makefile.in                  |   455 -
 vendor/thread2.7.3/README                       |    55 -
 vendor/thread2.7.3/aclocal.m4                   |    73 -
 vendor/thread2.7.3/configure                    | 12554 ----------------------
 vendor/thread2.7.3/configure.ac                 |   221 -
 vendor/thread2.7.3/doc/format.tcl               |    35 -
 vendor/thread2.7.3/doc/html/thread.html         |   727 --
 vendor/thread2.7.3/doc/html/tpool.html          |   273 -
 vendor/thread2.7.3/doc/html/tsv.html            |   471 -
 vendor/thread2.7.3/doc/html/ttrace.html         |   315 -
 vendor/thread2.7.3/doc/man.macros               |   236 -
 vendor/thread2.7.3/doc/man/thread.n             |   799 --
 vendor/thread2.7.3/doc/man/tpool.n              |   447 -
 vendor/thread2.7.3/doc/man/tsv.n                |   579 -
 vendor/thread2.7.3/doc/man/ttrace.n             |   472 -
 vendor/thread2.7.3/doc/thread.man               |   610 --
 vendor/thread2.7.3/doc/tpool.man                |   225 -
 vendor/thread2.7.3/doc/tsv.man                  |   331 -
 vendor/thread2.7.3/doc/ttrace.man               |   230 -
 vendor/thread2.7.3/generic/psGdbm.c             |   397 -
 vendor/thread2.7.3/generic/psGdbm.h             |    24 -
 vendor/thread2.7.3/generic/tclThread.h          |    31 -
 vendor/thread2.7.3/generic/tclThreadInt.h       |   174 -
 vendor/thread2.7.3/generic/tclXkeylist.c        |  1483 ---
 vendor/thread2.7.3/generic/tclXkeylist.h        |    52 -
 vendor/thread2.7.3/generic/threadCmd.c          |  3906 -------
 vendor/thread2.7.3/generic/threadNs.c           |    88 -
 vendor/thread2.7.3/generic/threadPoolCmd.c      |  1940 ----
 vendor/thread2.7.3/generic/threadSpCmd.c        |  1930 ----
 vendor/thread2.7.3/generic/threadSpCmd.h        |   128 -
 vendor/thread2.7.3/generic/threadSvCmd.c        |  2325 ----
 vendor/thread2.7.3/generic/threadSvCmd.h        |   225 -
 vendor/thread2.7.3/generic/threadSvKeylistCmd.c |   360 -
 vendor/thread2.7.3/generic/threadSvKeylistCmd.h |    27 -
 vendor/thread2.7.3/generic/threadSvListCmd.c    |  1171 --
 vendor/thread2.7.3/generic/threadSvListCmd.h    |    24 -
 vendor/thread2.7.3/lib/ttrace.tcl               |   942 --
 vendor/thread2.7.3/license.terms                |    39 -
 vendor/thread2.7.3/naviserver.m4                |    57 -
 vendor/thread2.7.3/pkgIndex.tcl.in              |    68 -
 vendor/thread2.7.3/tcl/README                   |    32 -
 vendor/thread2.7.3/tcl/cmdsrv/cmdsrv.tcl        |   310 -
 vendor/thread2.7.3/tcl/phttpd/index.htm         |     5 -
 vendor/thread2.7.3/tcl/phttpd/phttpd.tcl        |   686 --
 vendor/thread2.7.3/tcl/phttpd/uhttpd.tcl        |   416 -
 vendor/thread2.7.3/tcl/tpool/tpool.tcl          |   576 -
 vendor/thread2.7.3/tclconfig/install-sh         |   528 -
 vendor/thread2.7.3/tclconfig/tcl.m4             |  4192 --------
 vendor/thread2.7.3/tests/all.tcl                |    59 -
 vendor/thread2.7.3/tests/thread.test            |  1164 --
 vendor/thread2.7.3/tests/tpool.test             |     1 -
 vendor/thread2.7.3/tests/tsv.test               |     1 -
 vendor/thread2.7.3/tests/ttrace.test            |     1 -
 vendor/thread2.7.3/unix/CONFIG                  |    53 -
 vendor/thread2.7.3/unix/README                  |    70 -
 vendor/thread2.7.3/unix/threadUnix.c            |    27 -
 vendor/thread2.7.3/win/CONFIG                   |    21 -
 vendor/thread2.7.3/win/README.txt               |    62 -
 vendor/thread2.7.3/win/makefile.vc              |   487 -
 vendor/thread2.7.3/win/nmakehlp.c               |   697 --
 vendor/thread2.7.3/win/pkg.vc                   |     6 -
 vendor/thread2.7.3/win/rules.vc                 |   623 --
 vendor/thread2.7.3/win/thread.rc                |    46 -
 vendor/thread2.7.3/win/threadWin.c              |    54 -
 vendor/thread2.7.3/win/thread_win.dsp           |   275 -
 vendor/thread2.7.3/win/thread_win.dsw           |    29 -
 68 files changed, 46765 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread b/vendor/thread
</span>deleted file mode 120000
<span style='display:block; white-space:pre;color:#808080;'>index f01842829..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread2.7.3
</span>\ No newline at end of file
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/ChangeLog b/vendor/thread2.7.3/ChangeLog
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index d0fa6e841..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/ChangeLog
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1844 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2013-05-23  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvKeylistCmd.c: Change a few internal variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.c:    from type int to type size_t.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:          Simplify determination of whether
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl is compiled with thread support.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: re-generate with latest TEA.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-12-21  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThreadInt.h: Add runtime detection of Tcl_AddErrorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/*.c:  vs. Tcl_AppendObjToErrorInfo and Tcl_GetErrorLine vs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   interp->errorLine.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-12-16  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/*.c: Rename Tcl_Free -> ckfree and Tcl_Alloc -> ckalloc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   which allows a debug build of Thread use the debug versions of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   those functions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-12-13  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Tcl_Free cannot be used directly as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   freeProc (will break in "novem"), so use a small wrapper.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-08  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.7.0 TAGGED FOR RELEASE (thread-2-7-0) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: Update for stable release.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-14  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Move back test for core threaded functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in:     from pkgIndex.tcl to threadCmd.c, so it cannot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   be escaped any more.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-13  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: merge compileTipCheck to trunk. Additional
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   functionality to switch off TIP 143/285 functionality for static
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builds.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-10 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * genric/threadCmd.c: fixed race condition on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread-local storage in ThreadCancel().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-10 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** Merged "thread-2-7for84+" branch ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-11-08  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:         Bump to version 2.7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/pkg.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-09-13 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.7b1 TAGGED FOR RELEASE (thread-2-7-b1) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/html/tpool.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man/tpool.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man: fixed "tpool::create -idletime" description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Tcl Bug 3534442]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h: removed some unused structure members
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Tcl Feature Request 3563391]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-09-11  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in:       Use "::tcltest::loadTestedCommands" to make
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/all.tcl:     sure that the right Thread version is tested,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: without requiring explicit version numbers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-08-29  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/*.c:  Remove all (deprecated) usages of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   _ANSI_ARGS_ and TCL_PARSE_PART1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: Fix [Tcl Bug #3562640]: problem loading Thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: in 8.5, when compiled for 8.6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/makefile.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-07-17  Jan Nijtmans  <nijtmans@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/makefile.vc: [Bug 3544932]: Visual studio compiler check fails
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-07-05 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Fixed leaking callback data in ThreadSend()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   plus some minor cosmetic changes (tx to Gustaf Neumann).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-07-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: [Bugs 3534440, 3534581] fixed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, promoted jobId to be Tcl_WideInt (was uint).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-04-26  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c:        Eliminate some tricky finalization
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   problems by converting the SpBucket arrays from dynamic storage to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   static storage so they no longer need to be finalized.  Since they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   have fixed size of NUMSPBUCKETS, I don't see any strong reason not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to do this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2012-04-24  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: [Bug 1603234] Stop leak in [thread::transfer].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-12-05  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Fix #define issue when compiling for Tcl 8.5.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-24   Jan Nijtmans <nijtmans@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:    Only export Thread_Init(), nothing more.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvKeylistCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-20  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Correct check for current thread in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ThreadReserve function [Bug 3411244].  Correct the order for releasing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the interpreter and freeing memory, see check-in [6067508840].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-17  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Refactor ThreadEventProc to make sure all paths
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   out of the function call Tcl_Release on the necessary Tcl interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, call ThreadErrorProc consistently whenever the return code is not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_OK (i.e. do not check for it to be equal to TCL_ERROR).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-17  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: The [thread::wait] command should use the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_CANCEL_UNWIND flag when calling Tcl_Canceled because it manages its
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   own event processing loop.  Also, if the event processing loop is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   terminated due to a script in progress being canceled or exceeding a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   runtime limit, the registered error script should be evaluated, if any.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-17  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: The [thread::wait] command must cooperate with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the interpreter resource limiting (TIP #143) and asynchronous script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cancellation (TIP #285) functionality, when available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-11-17  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: For [thread::cancel], avoid creating a new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_Obj when the default script cancellation result is desired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.man: Update all remaining versions to 2.7b1.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tsv.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/ttrace.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/pkg.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread_win.dsp:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: Stop using -debug:full as it causes an error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with the MSVC10 compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-09-12  Joe Mistachkin  <joe@mistachkin.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Add support for TIP #285 (asynchronous script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cancellation) via a new [thread::cancel] command (available only for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl 8.6).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: Correct path to root of source checkout.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-08-01  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/rules.vc: Extend support to MSVC10.  Thanks to Twylite.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2011-06-27  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Copied revisions from the "sampleextension" package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in:  to keep compatible with the latest INSTALL changes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in TEA 3.9.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:    autoconf-2.59
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-12-08 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Fixed Bug #3129844
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-11-18  Don Porter  <dgp@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in:          Revised the `make dist` target so that the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/README.txt:       files under thread/win/vc in CVS are copied to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:   thread/win in the release, where tcl/pkgs/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread_win.dsp:        expects to find them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:    autoconf-2.59
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-10-04 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/configure      Regenrated for TEA 3.9. Bumped version string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/configiue.in   in all relevant files to 2.6.7  and autoconf'ed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/pkg.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-09-28 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Initialize tsdPtr->interp to NULL immediately after
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   releasing the interp on thread-exit that should hopefully resolve the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl Bug #3026061
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Removed safe-init so safe-interps should not be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   able to run thread commands directly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: Changed version to 2.6.7 to be in sync with main pkg.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Bumped version to 2.6.7 and autoconf'ed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-09-05  Donal K. Fellows  <dkf@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man, doc/tsv.man: Remove spaces in titledesc declaration;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   doctools currently does not like it at all when generating correct
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   nroff output.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-08-12  Andreas Kupries  <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl (_serializensp, _serializeproc): Fixed typos which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   smashed namespace name and opening brace of a script together, leading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to a syntax error for 'namespace eval' and preventing the use of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   package Ttrace.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-07-25  Donal K. Fellows  <dkf@users.sf.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: [Bug 3033206]: Be careful with variables outside of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   procedures; Tcl's variable resolution rules can jump in if a variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   is not declared, which can be at best surprising.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also rewrote the namespace serialization code to be more robust.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-05-31  Andreas Kupries  <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: Fixed procedure collisions for Thread package by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   inlining the load command into the ifneeded script, as is standard for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   most binary packages. Tweaked the procedure for Ttrace a bit, as the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result of [info commands] is a list, and using ::apply when possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   A named procedure is only a fallback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-05-27  Andreas Kupries  <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: Resynchronized version number with Thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-05-26  Andreas Kupries  <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c (ThreadMutexObjCmd, ThreadRWMutexObjCmd):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Bug 3007426]: Dropped trailing commas in enum definitions which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   choked the strictly C89 AIX compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-04-01 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/tclXkeylist.c: Removed declaration of global TclX keylist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-03-30 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.6.6 TAGGED FOR RELEASE (thread-2-6-6) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:              Redo for TEA 3.7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:    Cosmetic changes for the inclusion
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:    in standard Tcl distribution.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2010-03-19   Jan Nijtmans <nijtmans@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadSpCmd.c: Silence gcc warning: dereferencing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * .cvsignore:            type-punned pointer will break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            strict-aliasing rules.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * configure:             Regenerated using latest TEA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-08-19 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Implemented [tpool::suspend]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man:           and [tpool::resume] commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                              as per [RFE #2835615].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                              Also fixed [Bug #2833864].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-07-22   Jan Nijtmans <nijtmans@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:   Remove unnecessary ';'s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.c: Constify remaining of thread extension,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.h: bringing it at the same level as Tcl 8.6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvKeylistCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvKeylistCmd.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-07-16   Alexandre Ferrieux <ferrieux@sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.c: Constify Tcl_ObjGetType return values to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: get rid of const warnings; #if 0 of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h: SvFinalize which is unused.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-05-04  Pat Thoyts  <patthoyts@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: Updated the MSVC build to work with MSCV 8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/rules.vc:    and 9 on both intel and amd64 targets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/nmakehlp.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-05-03  Alexandre Ferrieux <ferrieux@sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: Reorder things in RemoveMutex and RemoveCondv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Bugs 2511424,2511408]; fix a Put* leak in an error path of rwmutexes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Bug 2511420].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2008-12-03  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: Handle TIP#336 addition of API to access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: interp->errorLine
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2008-11-03  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c (SvObjObjCmd): safely set interp result obj
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadCutChannel): fix const warning
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (ThreadSend): safely set interp result object [Bug #1988779]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2009-10-22 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPool.c: fixed race condition when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   creating minworkers worker thread upfront.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Failure to create one results in partial pool teardown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Fix for [Bug #2005794].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2008-05-22 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.h: Added one cond variable per
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sync bucket to wait for item deletion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: Threads that want to delete
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   any sync primitive now wait properly until the last
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread that references the primitive detaches.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Fixed (broken) reference counting of items.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Fixed wrong release of an condition variable that is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   about to be time-waited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2008-05-18 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Corrected potential race condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in TpoolWorker().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2007-06-30 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Fixed signedness compiler warning
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   on jobId in TpoolWaitObjCmd().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2007-06-30 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvKeylistCmd.c: Fixed off-by-1 error in argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   parsing for SvKeylkeysObjCmd(). See [Tcl Bug #1575342].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Fixed [Tcl Bug #1512225] (tpool::wait and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tpool::cancel setting wrong values to passed variables)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2007-05-26 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Fixed [tpool::post -nowait] to start
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     one new worker thread only if there are none started.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2007-05-03  Pat Thoyts  <patthoyts@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/rules.vc:     Updated the nmake build system to match
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/nmakehlp.c:   current 8.5. (support for non-intel build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:  and recent versions of msvc compiler)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/thread.rc:       Fixed line endings.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-12-26 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Fixed race condition for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   creating preserved threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSv.c: Removed memory leak.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-10-07 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.6.5 TAGGED FOR RELEASE (thread-2-6-5) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Main changes since the last release:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Set versioning of (embedded) Ttrace package to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the same revision level as the main Thread package.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   The Ttrace must now explicitly be loaded in every
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   new thread created by [thread::create] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   The [package require Ttrace] automatically loads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Thread package as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   NOTE: be sure to configure/make/make install
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   because the pkgIndex.tcl loader file is modified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-10-06 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPool.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Removed Tcl_PkgRequire
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   from the new thread initialization and just
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   initialize the C-aspect of the extension by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   calling Therad_Init. This basically discards
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the last checkin, which was in a sense bad
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   as it made thread creation very expensive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: Added separate handling for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Ttrace loading. Now, users needing Ttrace caps
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   must "package require Ttrace" which in turn
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   automatically calls "package require Thread".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, each new thread created by [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   must be initialized for Ttrace by calling the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [package require Ttrace].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   On the other hand, the "package require Thread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   is only necessary to first-load the package in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the startup thread. It is not necessary to call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   this explicitly in every thread created by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [thread::create] command as the C-code will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   do that automatically as the first thing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/ttrace.man: Updated example usage to reflect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   above changes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: Spliced version numbering of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Ttrace package to the version of the Thread package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   because of the weirdness of the Tcl package loading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   mechanism. Also, the broadcast script used within
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the ttrace::eval now explicitly loads Ttrace package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in every broadcasted thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-10-05 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPool.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Call Tcl_PkgRequire() in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   NewThread() to properly initialize the extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in any new thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/ttrace.man: Add small example of ttrace usage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: Fixed [ttrace:eval] to not to call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [package require Ttrace] in the broadcast script as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   this is now done implicitly for all new threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-08-06 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.6.4 TAGGED FOR RELEASE (thread-2-6-4) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.c: Silenced various
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c    compiler warnings.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: Removed version information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Bumped to 2.6.4 version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * confiigure: Regenerated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-06-04 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: SvIncrObjCmd() now implicitly creates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shared array and/or element and initializes it to zero if the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   array and/or the element were not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h: Removed some unusded debugging defs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-04-05  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/pkg.vc (PACKAGE_VERSION): correct to 2.6.3 for MSVC make.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-03-28  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c (AppExitHandler): fix teardown to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   destruct pool list correctly. [Bug 1427570]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-03-16 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.6.3 TAGGED FOR RELEASE (thread-2-6-3) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: Bumped to 2.6.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-03-15 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Changed BUILD_sample to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   BUILD_thread for Windows compile under MinGW.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   + configure: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-03-14 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Moved to 2.6.3 release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-02-09 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: fixed race condition when testing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   constraints (mutex being locked by the caller thread) when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   waiting on the condition variable. Also, fixed exclusive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   mutex ownership and usage counting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: uses TEA 3.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tclconfig: updated to TEA3.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2006-01-28 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: Revamped handling because of the deep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.h: race condition which resulted in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test:     deadlocks when using exclusive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-200i-10-15 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: channel transfer code cleans
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ready-to-fire events from the thread event queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     prior to cutting the channel out of the interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: allows channel transfer tests
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     for all Unices and Windows using Tcl 8.4.10+ core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-09-23 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: ThreadDetach() sets the both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     source and target thread ID's for the detached
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     channel to zero, thus signalizing the cleanup code
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     to leave the channel in the cleanup-list when the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread who detached it exits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-08-24 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.c: made some calls static
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     so they do not interfere for static linking with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          certain extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-08-08 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: fixed traversing the list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     of registered object types in Sv_DuplicateObj()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     (thx to eric.melbardis@netkitsolutions.com)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-07-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *** 2.6.2 TAGGED FOR RELEASE (thread-2-6-2) ***
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * unix/README: added some clarifications about usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     of --with-gdbm switch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: bumped version to 2.6.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aclocal.m4: fixed for alternate gdbm lib location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     as per patch request #1245204
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.c: removed Thread_Unload and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Thread_SafeUnload because we can't really be unloaded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * html/thread.html: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * html/tpool.html: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * html/tsv.html: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * html/ttrace.html: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * man/thread.n: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * man/tpool.n: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * man/tsv.n: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * man/ttrace.n: regen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-07-26  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: Remove SYSTEM_TCLSH and any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   code that tries to run tclsh at build time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   aside from running the test cases.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: Regen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Remove calls to TEA_BUILD_TCLSH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and TEA_BUILD_WISH since these were removed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   from tcl.m4. This fixes up the build when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   --with-tcl indicates either a build dir or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and install dir.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-07-25 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: simplified by introducing a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   helper procedure, thus avoiding too much quoting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-07-24  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: Subst TCLSH_PROG as SYSTEM_TCLSH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and subst BUILD_TCLSH and BUILD_TCLSH_PROG.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: Regen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: Invoke TEA_BUILD_TCLSH from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl.m4 to correctly determine BUILD_TCLSH.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-04-12 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: reverted some changes by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   last checkin which slipped in by mistake
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-04-09 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added Thread_Unload and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Thread_SafeUnload to be able to load into the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   8.5 shell. Both calls are still no-ops.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-03-18  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in (AR): use @AR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (TCLSH_ENV): add TCL_THREAD_LIBRARY var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: grok TCL_THREAD_LIBRARY var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure, configure.in: update to TEA 3.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-03-15 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: Applied patch for Bug #1163357.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, fixed the case when directory path contains blanks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-03-05 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: fixed potential access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to the unlocked (and thus eventually freed) container
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: the overloaded [info] command now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   does the right thing when applied to non-existing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   procedures. We now transparently resolve them and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   then allow the [info] to operate on them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   The ttrace::enable can now be called recursively.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, fixed stript generation issues for namespaced
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   variables containing wild escape sequences.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-01-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: fixed Tcl Bug #1095370.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   We were wrongly tearing down workers on idle timer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   expiry *below* the number of workers set by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "-minworkers" option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: added [ttrace::config] to control
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   some runtime options. The only option it allows now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   is "-doepochs". This is a boolean flag turning the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        epoch generation off/on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, improved handling of XOTcl introspections in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   regard to namespaced objects/classes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-01-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: added [ttrace::isenabled] and modified
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the [ttrace::addtrace] to dynamically activate the tracer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if the tracing is already enabled. This way we can dynamically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   load tracer scripts.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2005-01-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        **** RELEASE: 2.6.1 Tagged ****
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aolserver.m4:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: rebuild and include conditional compilation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for AOLserver which was wrongly ommited since the switch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to the TEA3 build system.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, we will now revert to <major>.<minor>.<patch>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   version numbers for all releases.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added new option "-head" to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [thread::send] command so scripts can be placed on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   head of the thread event queue instead of the tail only.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc: rebuild html/nroff files from doctools sources
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h: removed compat macros for 8.3 core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * test/thread.test: added case for [thread::send -head]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-12-23 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        **** RELEASE: 2.6 Tagged ****
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/cmdsrv/cmdsrv.tcl: example command server listens on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loopback interface (127.0.0.1) only
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: removed stuff about (now unsupported) Tcl8.3 core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * unix/README: clarified usage of the CONFIG file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc: adjusted MSVC files for changes introduced by TEA3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-12-18 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   **** COMPATIBILITY: Dropped support for Tcl8.3 ****
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aclocal.m4: Adjusted for TEA3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: Rebuild with autoconf 2.59
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/all.tcl:    Removed extra handling for Tcl 8.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.tcl: since we do not support 8.3 any more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/psGdbm.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.man: Updated docs for the 2.6 release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tsv.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/ttrace.man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-11-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: Fixed race condition which resulted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in blocking at pool creation with high -minworkers threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   This fixes the Tcl Bug #933975.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-11-25 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.tcl: Disabled all tests handling channel transfer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for Windows ports until core is capable of handling this correctly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadSpCmd.c: Fixed segmentation problems observed on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Windows ports and related to notification of an uninitialized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   condition variable(s). This closes Bug #1051068 (wrongly posted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   under Tcl Patches at SF).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.man: Fixed mutex/condvar code example. Thanks to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Gustaf Neumann of XOTcl for the tip.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-10-21  Andreas Kupries <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Added two tests checking the working of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevents after a pipe channel has been transfered. The second
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   has to fail for any core where TIP #218 is not applied, because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the incoming alert is directed to the wrong thread for event
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   processing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-10-20 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadSetResult): adjusted handling of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   interp result to accomodate for recent changes in Tcl core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   This closes Tcl Bug# 1050490.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-10-19  Andreas Kupries <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: Added a prototype for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SvObjDispatchObjCmd. Prevented compilation of debug variant on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Windows due to warning as error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Added more tests transfering channels between
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   threads for in-core drivers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-10-18  Andreas Kupries <andreask@activestate.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadErrorProc): Added code to explicitly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   initialize the field 'interp' in ThreadSendData. This was ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (NULL) for a regular build, but when build with symbols the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   guard pattern forced a crash in test thread-16.2.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Duplicate test id thread-16.1 renamed to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread-16.2.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-08-14 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: fixed broken parsing of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   pool handles. Pool handles are now generated in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   same format as thread handles.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: thread handles are now cased to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (void*) and sprint/sscanf calls are used to generate thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   handles. This concludes the effort of correcting broken
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   handles on 64-bit machines since the problem was actually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in Tcl itself, rather than here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-07-21 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h: corrected namespace prefix for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AOLserver 4.x or higher, since namespaced commands are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   now supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: allows for re-initializing of package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   commands for AOLserver 4.x (or higheri) interpreters. This way
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   we assure to have correct set of commands even if nobody
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loaded the package on server startup.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, thread handles returned by the package now have the form:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "tid<number>" in (yet another) attempt to rectify problems found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   on Cray computers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: adjusted handles of the pools to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   match ones of threads (see above).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-07-21 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/*: reformatted docs and added some clarifications
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   about mutex handling.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: rewritten handling of thread handles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   as passed to Tcl. Instead of casting Tcl_ThreadId to unsigned int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   which brought some problems on Cray machines, we're now generating
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   opaque handles and match them to Tcl_ThreadId internally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   NOTE: this is not supposed to be a compatibility issue since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread-handles should have been treated as opaque anyways.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.*: improved behaviour when destroying locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   mutexes and locking the same mutex twice from the same thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   In both cases we throw Tcl error instead of coring  the process
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   or deadlocking the (naive) application.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.*: number of tsv buckets is now compile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   time constant.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: Fixed error in unknown wrapper when the passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   command was empty string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/all.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: rewritten from scratch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/tpool.test:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/ttrace.test:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/tsv.test: new files, currently no-ops.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-01-31 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * lib/ttrace.tcl: added unconditional "package require"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   call to ttrace::eval so we need not explicitly load the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Ttrace package in each and every thread. Also, fixed some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   issues with errorInfo/errorCode handling.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: fixed Tcl Bug #918137
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/format.tcl: fixed inclusion of man.macros in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   every *.n doc file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2004-01-31 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed incorrect handling of return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        codes from the scripts passed to threads. We were wrongly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        triggering error for non-error return codes such as TCL_RETURN,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_BREAK, TCL_CONTINUE etc. Now we trigger error only for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_ERROR and return other codes (as-is) to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   This also fixes the Tcl Bug #884549.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-12-22 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: added recursive and reader/writer locks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and associated commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.h: added new file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/lib/ttrace.tcl: added Ttrace package implementation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc: added documentation for Ttrace package and synced other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   doc files to match the release 2.6 state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-12-01 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: removed the concept of foreign
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread since it broke our async message bouncing. We
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   still have to find the way how we should avoid broadcasting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   non-package threads (like for aolserver).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-11-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed mutex release in ThreadSend
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when refusing to send message to foreign thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, clear the result of the thread::broadcast since it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   should not return anything to the caller, no matter the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   outcome of the command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-11-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: mark threads created by the package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to distinguish them from "foreign" threads. We will forbid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sending messages to those since they will probably never listen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: corrected some typos
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.c: added implementation for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "tsv::lset" command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: added optional varname argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (last arg) to the tpool::cancel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-11-25 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/format.tcl: new file with a simple poor man's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   documentation formatter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tsv.man: new doctools source files for building
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the package documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: added support for building nroff and html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   files out of doctools sources found in doc directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-11-18 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added implementation of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::broadcast command. This one asynchronously
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sends a script to all known threads, except the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-09-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclXkeylist.(c|h): added keyed-list datatype
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   implementation borrowed from the TclX package. This is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   now part of the shared variable command set.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.(c|h): modified to support persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shared variables with plugin-architecture for different
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   persistent store implementations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvlistCmd.(c|h): modified to reflect added
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   support for persistent shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/psGdbm.(c|h): added persistent store wrapper
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for the GNU gdbm package.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure et al: regenerated with autoconf because of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   added optional comilation with GNU gdbm. Updated makefiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to process newly added files for keyed lists and persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   stores.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-08-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: after expiration of the idle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   timer, all idle workers exit unconditionaly. Before the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   change, idle threads exited after getting the first job
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   posted. This way we were loosing work.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-08-26 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: fixed result list corruption
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in TpoolCancelObjCmd.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-07-27 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: added "-nowait" option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to the "tpool::post" commandi. This allows the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   caller to post jobs to the threadpool queue without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   waiting for an idle thread. The implementation will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   start at least one worker thread if there is none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   available to satisfy the first request.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Added "tpool::cancel" command. See docs for info.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-05-31 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed ListRemoveInner for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the Tcl Bug #746352
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: modified Sp_Init to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return a proper value for Tcl Bug #746352
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-05-17 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: sets the name of the new thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to "-tclthread-" when compiled for AOLserver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-04-29 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tagged interim 2.5.2 release.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: Added quick fix for autoconf issues
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        related to $srcdir and building of the package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        from the top-level dir instead of unix/win subdir.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Thanks to Mo DeJong for the fix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-04-10 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: removed checking of stopped flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   during walk of the list of active threads. This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   solves some subtle thread reservation problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with threads marked to unwind on error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, added new "-errorstate" configuration option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to set/get error state of reserved unwinding thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-04-02 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: always call registered exit callbacks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with non-NULL clientData, otherwise Tcl won't invoke
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the registered  callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-03-28 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvList.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: fixed some rare cases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   where we incorrectly deep-copied the list object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   having zero elements.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed broken AOLserver 3.x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   compatibility mode introduced by last 4.x changes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-03-17 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: fixed incompatibility
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with Tcl 8.4.2 filepath object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aolstub.cpp: adjusted for AOLserver 4.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-02-24 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed ThreadSetResult
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to correctly initialize all elements of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-02-08 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed ListRemoveInner
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to correctly update global threadList ptr when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the last referenced thread exits. This was not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the case before and we were trashing memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   leading to process exitus.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-01-25  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadSendObjCmd):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   The thread::send command was not working
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   under Win32 because threads that had an id
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   that was a negative number were generating
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   a usage error in the thread::send command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Add test for negative
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   number as thread id.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-01-22 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed reference to errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when reporting error from the passed script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2003-01-21  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: Regenerate to include recent fixes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for mingw build support in tclconfig module.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-18 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: added some AOLserver info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/tpool/tpool.tcl: added missing tpool::names command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-14 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/*: finished docs for the 2.5 release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-09 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: added tpool::names command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   added -exitscript for tpool::create
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/tpool.tmml
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man/tpool.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/html/tpool.html: added files. This is still the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   work in progress.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-06 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aolserver.m4: added support for compilation under
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AOLserver as loadable module.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-06 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: the tsv::lock now allows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for unsetting the shared array within the script argument.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: fixed one missing mutex unlock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in the ThreadRelease.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * tcl/tpool/tpool.tcl: implemented missing API calls found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in the C-level implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/phttpd/phttpd.tcl: simplified switching to Tcl-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   threadpool implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-04 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolcmd.c: rewritten to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   worker threads sitting on the cond var instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in the event loop. The poster thread still respects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   i.e. does not block the event loop while posting jobs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-12-03 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclthread.h: added SpliceIn/SpliceOut macros.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Fixed to include exports from threadPoolCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: does regular namespace handling
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   over the NS variable instead of hard-coding the "thread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix for mutex/cond commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: rewritten to use SpliceIn/SpliceOut
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        macros instead of hand-fiddling with linked lists.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadPoolCmd.c: new file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: added threadPoolCmd.c to list of source files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-11-25 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/phttpd/phttpd.tcl: added raw file; no thread support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/cmdsrv/cmdsrv.tcl: first working version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-11-24 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/tpool/tpool.tcl: added threadpool implementation in Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/phttpd: added directory for later mt-enabled pico-httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tcl/cmdsrv: added directory for later socket command server
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man/thread.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.tmml
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/html/thread.html: new tsv::eval, thread::attach, thread::detach
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: added tsv::eval command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added thread::attach, thread::detach
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also, fixed thread::preserve and thread::release to accept
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the thread id as the optional paramter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-11-23 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed ListRemoveInner() to recognize
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and ignore already removed tsd thread structures.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Fixed some invalid TCL_OK returns which masked serious errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-11-07 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixes problem when trying to report
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the error from an async callback when the stderr channel is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   not available (wish/tclkit on windows). Thanks to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Wojciech Kocjan <wojciech@kocjan.org> for the correction.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-10-23 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added handling of background errors
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   while doing an async callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-10-20 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/html/thread.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man/thread.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.tmml: fixed "thread::send" command summary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   It was showing the wrong position of the "-async" argument.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: adjusted mutex/cond handles to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   use the same format and handling as AOLserver counterparts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when compiled for AOLserver support. This way one can mix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and match primitives declared with ns_mutex and thread::mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and/or ns_event and thread::cond commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Added thread::eval command. See documentation for syntax and usage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-10-15  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: move the CFLAGS definition into TEA_ENABLE_SHARED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and make it pick up the env CFLAGS at configure time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-08-23 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * threadCmd.c: fixed potential memory corruption
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when releasing preserved interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Tcl bug 599290]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-08-19 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: we now properly invalidate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   duped object string rep if the internal rep has been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   regenerated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-08-18 Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: updated some comments
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.c: fixed silly mem leak
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   where we were registering commands and object types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for each new thread, resulting in unnecessary table
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   grow. Not a memory leak per-se, therefore not found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   by Purify, but shows itself by observing the size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   of the process using the top utility. Gosh!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-08-03  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvListCmd.c: corrected "tsv::lpush"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to correctly make a copy of the object pushed into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the list in shared array element.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-22  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: Fix typo.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man/thread.n: Note that thread::join and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::transfer are only available with Tcl 8.4.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-20  Mo DeJong  <mdejong@users.sourceforge.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadSvCmd.c (Sv_tclEmptyStringRep, Sv_Init):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Avoid linking to the tclEmptyStringRep variable defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        in Tcl since this makes it very difficult to load
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        the Thread package into an executable that has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        also loaded Tcl. The previous approach used a hack
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        under Windows, we now use this same hack on all systems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Tcl patch 584123]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-19  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * threadCmd.c: added some macros to simplify
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   adding and removing result structure in and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   out of the corresponding lists
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-18  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * threadCmd.c: modified thread::release to allow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for optional "-wait" argument. This will result in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the thread waiting until the target thread has really
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exited. Otherwise, the command exits immediately and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   target thread may exit asynchronously some time later.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   This is not techically needed since one can always join
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the exiting thread, but the join command is not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   available for some older Tcl versions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-13  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/man:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/html: added two directories with TMML generated files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.tmml: fixed for the final 2.4 release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: updated install-doc target to look for man files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   under doc/man instead only under doc directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-12  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.s: fixed handling of string rep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   in shared var object duplicator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-09  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * README: added this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * license.terms: added this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-05  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * tclconfig/tcl.m4: fixed reference to MINGW so we can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   compile w/o MSVC under windows.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-07-03  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: simplified object duplicator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-06-17  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: cleanup of some unused variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/ThreadSpCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvList.c: added CONST qualifiers to avoid warnings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when compiling against 8.4 core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-05-25  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added some typecasts to satisfy Windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.h: added some typecasts to satisfy Windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-05-04  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: removed errant reference to (still not)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   supported shared dictionary and shared keylist datatypes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-04-27  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed processing of -eventmark. We now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   properly wait for target thread to catch up with processing events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-04-07  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added call to Ns_TclMarkForDelete(interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   when compiled for AOLserver support, otherwise we were leaking std
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   channels on thread exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-04-03  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: improved use of DESTDIR in install targets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Removed need for installdirs target.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Broke TCLSH_PROG into TCLSH_ENV and TCLSH_PROG with TCLSH var and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   added comments about TCLSH_ENV.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Added default shell and gdb targets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: updated to new TEA base that: prefixes all macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with TEA_* instead of SC_*; adds TEA_PREFIX, which defaults the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix and exec_prefix values to what Tcl used; adds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_SETUP_COMPILER, which handles basic compiler / support program
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   checks and simplifies the configure.in.  Turn on --enable-threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   by default and do sanity checking as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-04-01  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in (install-lib-binaries): ensure that binary files are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   installed with executable bit set (use INSTALL_PROGRAM)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-28  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: BUILD_${PACKAGE} had to be static BUILD_thread in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE because autoconf wasn't substituting ${PACKAGE}.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-27  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in (TCLSH_PROG): moved and updated env var definitions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to have tclsh work from build dir.  Removed TCL_EXTRA_CFLAGS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_LD_FLAGS, TCL_SHLIB_LD_LIBS, TCL_DBGX, TCL_STUB_LIB_FILE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_STUB_LIB_SPEC as they aren't needed (configure acquires all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   that info for us).  TCL_LIBS is also not needed, but left in as a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   reference to the libs Tcl used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure: regen based on updated tclconfig/tcl.m4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in: moved the SHLIB_LD_LIBS magic into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tclconfig/tcl.m4 and noted where users can modify (SHLIB_LD_)LIBS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-19  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added stub voodoo magic to allow building
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   against Tcl 8.3 and still get all the 8.4+ functionality when later
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loaded into an 8.4+ interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * pkgIndex.tcl.in: simplified auto-generated pkgIndex.tcl file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/all.tcl:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: improved to detect 8.3/8.4 pkg differences
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tclconfig/tcl.m4,install-sh (new):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * config/* (removed):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * aclocal.m4:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: Updated build system to use tclconfig (TEA 2002)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-09  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: fixed memory leak when copying objects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   using custom object duplicator. If a duplicator was registered
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   more than once, we were leaking memory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-08  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added thread::configure -unwindonerror
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   configuration option. See docs for usage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n: added docs for thread::configure -unwindonerror
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-03-07  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: tsv::names will skip reporting shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   arrays with leading dot in their names. This is turned-on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   only for AOLserver builds with the HIDE_DOTNAMES. For the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   regular Tcl builds, all arrays are reported, regardless of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the name. Motivation behind this feature is to allow certain
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   data privacy. It is not name-clash proof, though.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-02-12  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed thread::preserve glitch. We never
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   actually did bump the reservation counter by a silly mistake.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-02-12  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added thread::preserve and thread::release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   commands. These allow for a simple reference counting when creating
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and/or tearing-down threads. Instead of calling thread::unwind in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the target thread, one can use "thread::release id" to dispose it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   This is much easier to use and it can be coupled with calls to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::preserve to implement simple thread reservation mechanism.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n: added docs for thread::preserve/thread::release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-02-09  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added thread::configure interface.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Currently only "-eventmark" option is supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Allows for AOLserver builds to change the "thread::" prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   by re-defining the "NS" compile-time constant.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n: added docs for thread::configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-02-06  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/aolserv.cpp: (new) added for loading into the AOLserver.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Still needs to fix the Makefile and friends to get it up and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   running.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: added conditional setup of the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix. Now, the "NS" can be used to select the command prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for thread::* commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-01-26  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c:  A small 'const' qualifier change to remove a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   warning.  It's a bit more wordy now, but reads a little clearer to me.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Unscambling pointer math gives me a headache and combined with a cast
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tends to get dangerous.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/threadWin.c: new idea for thread::kill added.  It's wrapped in an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #if 0/#endif for now.  I do notice that tcl.h is now typedef'ing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ClientData as an 'int *'.  It used to 'void *', didn't it??  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ISO/ANSI/CLEAN C style of setting a typed pointer to a void* now doesn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   want to work.  Maybe I do too much C++ to have noticed this before...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-01-23  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed address of the target interpreter when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   doing the callback async script processing. All messages went to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   main interpreter instead of the selected interpreter, causing process
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to hung when posting callbacks to more that one interp at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (thanks Jean-Luc Fontaine for the tip)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-01-20  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: fixed multiple async reporting of error events
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (thanks Jean-Luc Fontaine for the tip)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2002-01-02  Zoran Vasiljevic <zv@archiware.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadSvListCmd.* (new): added for the new implementation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        of the thread-shared-variable (tsv) interface.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadSvCmd.c: now uses shared Tcl objects instead of strings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for storing data in shared arrays. This improves performance on large
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        shared data structures.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Added new tsv::* syntax, per request. This replaces older thread::sv_*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interface. Older commands are still present but will be removed as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        soon we hit the 3.0 version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * generic/threadCmd.c: revamped to support asynchronous backfiring
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        of scripts so we can vwait on the results of thread processing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        This also corrected the bug #464340. Affected command is thread::send.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * doc/thread.n: added docs for all thread::* and tsv::* commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        This fixes #416850 bug report. The html/tmml files are still out of date.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * configure: built with autoconf 2.52
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * config/config.guess (new): needed for the new configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * config/config.sub (new): needed for the new configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * Makefile.in: added lines for new generic/threadSvListCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * configure.in: moving to 2.4 version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * unix/threadUnix.c: removed traces of ThreadKill. It is still not clear
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        wether we should implement this functionality or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * win/threadWin.c: see above.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * pkgIndex.tcl.in: fixed to correctly handle version for different Tcl core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        versions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-09-05  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/*:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/threadWin.c (new): updated for a new threadWin.c and finished
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   replacing use of thread.h with tclThread.h.  threadWin.c is an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   experiment to add a 'thread::kill' command.  Not done yet.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.rc (removed):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/thread.rc (new): moved it up a directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-09-04  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h (deleted):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/tclThread.h (new):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:  decided to change the name of 'thread.h' to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'tclThread.h', per request.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:  Re-added original implimentation of [thread::exit].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for `emergency use only`.  You have been warned ;)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.dsp:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/pkg.vc:  Upped version numbers to 2.3 and 2.1.3 because I just cut
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   a release.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-09-04  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -=[ Official 2.2 Tagged and cut. ]=-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-05-27  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: fixed small typo in comments.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-08-03  Jeff Hobbs  <jeffh@ActiveState.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: corrected handling of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h: added Thread_SafeInit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: added -DBUILD_thread to cflags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-05-27  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           Added package versions to the compile flags. [bug #421246]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-04-28  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (NewThread): removed the previous addition of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_FinalizeThread.  Tcl_ExitThread calls it anyways (my mistake).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   The resource leak was in the core.  See ->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   http://sourceforge.net/tracker/?func=detail&atid=110894&aid=419683&group_id=10894
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for the fix.  That patch is pending approval.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   To acheive the same behavior of emptying the event loop the way
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::wait used to work, use the following:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           set T [thread::create {thread::wait; update}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           thread::send -async $T thread::unwind
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.rc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/pkg.vc (new): Moved version numbers from the header file.  It isn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   an export API or anything.  Moved version numbers to the build files.  I'll
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   modify configure.in and makefile.in a little later.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-04-26  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * config/* (new): old site-wide config directory re-added.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadEventProc): ThreadErrorProc now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   supported in asyncronous sends when Tcl_Eval returns other than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_OK.  Errors were silently ignored prior to this. Bug #219324
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ==== INTERFACE CHANGE ====
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h: thread::exit renamed to thread::unwind. The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   name of 'exit' is misleading.  An exit implies an unconditional
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return.  But there are conditions.  'unwind' describes with more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   clarity what's happening to the prior thread::wait.  For example:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # parent thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     set T [thread::create {source worker.tcl}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread::send -async $T doStuff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread::send -async $T doStuff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread::send -async $T thread::unwind
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # worker.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     proc init    {} {#do initialization}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     proc cleanup {} {#do cleanup}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     proc doStuff {} {#the work}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     init
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread::wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     cleanup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   When worker.tcl is sourced, the execution stops at thread::wait and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the event loop is entered.  When thread::unwind is sent to the worker,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::wait falls-out and cleanup is called.  The condition for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::unwind to cause an exit is determined by the script.  If
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::wait was the last Tcl command in the script, yes the thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   will exit.  But if thread::wait is not the last, the execution of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   script is just continued.  Hence, the name change to clarify this fact.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Package version has not been changed.  There hasn't been an official
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   release of 2.2, so it stays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Replaced thread::exit with thread::unwind and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   documented the change and clarified the subtleties.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.dsp: Changed NODEBUG macro to be DEBUG instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Double negatives give me a headache.  DEBUG=1 makes more sense
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to me than NODEBUG=0.  Not that I didn't think you wouldn't have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   disagreed it was confusing, no?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/config.vc: Added a reminder to edit before using.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.rc: Added authors and removed the Ajuba branding.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2001-04-25  David Gravereaux <davygrvy@pobox.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (ThreadWait)(NewThread): Removed the event
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loop sinking which was probably done because Tcl_FinalizeThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   was missing from NewThread().  Now the event loop is cleaned
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   by Tcl_FinalizeThread and ThreadWait doesn't manipulate events
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   that don't belong to it.  Bug #418689 and #418693
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (Thread_Init): logic fix in a version check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for determining the 8.3 package subset.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-11-02  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (NewThread): Added logic to test for a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   working Tcl_Init() based on the core version at runtime and ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   its failure in versions 8.3.[1,2] and 8.4a1.  [BUG: 5301]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-10-26  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/config.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.dsp: upped version numbers to 2.2 along with adding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   a new macro (THREAD_VERSION_SUBSET83) defining the version when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loaded into an 8.3 core.  Which happens to be "2.1.1" at this time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (Thread_Init): Added logic to allow setting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the package version at runtime to "2.2" when compiled against 8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and loaded into 8.4.  When compiled against 8.4, yet loaded into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   8.3, thread::join and thread::transfer are not added to the interp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   and the package version is set to "2.1.1" instead from the single
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   binary.  [ie. multiple interfaces in one binary]  When compiled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   against 8.3, thread::join and thread::transfer are non-existant and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the package version is always "2.1.1" to maintain a consistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   interface in all combinations (as per discussions with Don Porter).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-10-16  Zoran Vasiljevic <zv@munich.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c ThreadSvUnsetObjCmd(): deadlocked.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Forgot to release shared-array lock which resulted in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        deadlock after first successful unset of the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-29  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c (NewThread): Tcl_Init return value wasn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   being verified.  Added a check and failure logic to fall-out.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [Bug: 5301]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-28  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmds.c (Thread_Init): Added logic to enable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   thread::join and thread::transfer when loaded into an 8.4+ core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   We don't want a seg fault when the Stubs tables don't match for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the functions that don't exist in an 8.3 core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-23  Brent Welch <welch@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * configure.in:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: Changed to version 2.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmds.c: Made the code that uses new Tcl 8.4 APIs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   conditional using #ifdef.  Tested with 8.3.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Applied thread-2-1 tag for use with tclhttpd bundled release.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-21  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.rc: added version numbers to filename to follow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl standards.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.tmml(new): Initial TMML document.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-20  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/config.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/README.txt:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.dsp:  A near top down rewrite that adds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   four more build configurations.  See README.TXT for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   details.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/.cvsignore:  A few more glob patterns added to match
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the new build directories.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-08-09  David Gravereaux <davygrvy@ajubasolutions.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.rc: swapped "Scriptics Corp" for "Ajuba
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Solutions"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/config.vc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/makefile.vc: cleaned-up old cruft.  Added new files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   from Zoran's patches.  made swapping to MSDev 6.0 easier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Removed the '!if $(_NMAKE_VER) > 162' test for 2 reasons.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   1) batchmode inference rules are valid since MSDev 5.0 and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the core can't be built with less.  So don't bother testing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   2) nmake.exe that comes with MSDev 6.0 has a bug with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   meaning of that macro and MS decided to use a string instead
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   breaking the integer comparison test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Also added vcvars32.bat to a new setup rule and got config.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   much smaller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/thread.dsp: Added new files from Zoran's patch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/.cvsignore(deleted):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/.cvsignore(added): moved file to help keep a cleaner
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   build environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: Added some additional casting of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_GetHashValue to prevent compiler warnings.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c(ThreadWait): Removed the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sinking after the "while(..) Tcl_DoOneEvent();" because this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   extension is only responsible for it's own events in the event
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   loop.  Any other extension that's queueing events must be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   responsible for it's own cleanup and should be aware of when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the interp (ie. this thread) is going away when we fall-out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to Tcl_DeleteInterp from the Tcl_Eval in NewThread().  If other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   extensions (like Tk) don't become aware, then they need to add
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   a Tcl_CallWhenDeleted handler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-07-14 Zoran Vasiljevic <zv@munich.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: improved thread::exit behaviour
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     now does a better job of draining the event loop before exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     may have some wishes open, though - see ThreadWait().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c, generic/threadSvCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     added some comments in function headers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     docs/tests for above still pending.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-07-03 Zoran Vasiljevic <zv@munich.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           Summary of changes:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSpCmd.c: new file with implementation of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     "thread::mutex" and "thread::cond" commands. Documentation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     and tests are still pending.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadSvCmd.c: new file with implementation of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     "thread::sv_*" family of commands modeled after AOLserver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     nsv_* ones. Documentation and tests are still pending.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: fixed for the two above
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n: added 'thread::exists' docs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/thread.h added declarations for new commands (above)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Added "thread::exists" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Moved most of internal functions in threadCmd.c to statics,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          except the Thread*ObjCmd().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Changed behaviour of "thread::exit". It now simply flips the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          bit to signal thread stuck in thread::wait to gracefuly exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          Consequence: command now does not trigger error on thread exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          Also, thread event queue is now properly cleared.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          ThreadWait() and ThreadStop() are newly added to support this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          Also the ThreadSpecificData has one more integer: "stopped"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Replaced ref's to obsolete Tcl_GlobalEval() with Tcl_EvalEx().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Fixed broken 'thread::create -joinable script';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          was missing initialization of script variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Added calls to initialize new commands in threadSpCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     and threadSvCmd.c files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-05-18 Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Restored Andreas' changes for transferring sockets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-05-16 Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Temprarily rolled back Andreas' changes so I can fix up
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the 2.0 release (configure and Make).  Also need to apply
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   a 2.0 tag.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-05-09 Andreas Kupries  <a.kupries@westend.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Removed dependency on aclocals.m4. Using a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     real temporary file now, as created by a call to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     tcltest::makeFile. Updated test 6.3 to use the correct length
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-05-04  Andreas Kupries <a.kupries@westend.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Overall changes:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     (1) Added joinable threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     (2) Added transfer of channels between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c: Added functions Thread_Join and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ThreadJoinObjCmd.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Extended function ThreadCreateObjCmd to handle a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     -joinable flag.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Fixed bug in Thread_Create, the argument 'stacksize' was not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Removed declaration of ThreadObjCmd, which was not used anywhere
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     else in the code.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Added functions Thread_Transfer, ThreadTransferEventProc and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ThreadTransferObjCmd. Extended behaviour of ThreadDeleteEvent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     and ThreadExitProc to deal with the new class of events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Changed usage of ckfree to the more canonical Tcl_Free. Same for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ckalloc and Tcl_Alloc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: Fixed bug with regard to the installation of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.*: Added documentation of create -joinable,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     thread::join and thread::transfer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: Added tests for joining of threads and moving
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     channels between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-19  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * win/vc/config.rc, Makefile.vc: Fixes from David Gravereaux
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-18  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Makefile.in: Fixes for make install
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-17  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * generic/threadCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Added Tcl_CreateThreadType and TCL_RETURN_THREAD_TYPE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   macros for declaring the NewThread callback proc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-11  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Picked up minor changes from David Gravereaux <davygrvy@bigfoot.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * for compilation on windows with his alternate project files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-10  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Moved all the configure.in, Makefile.in etc. up to the top level out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * of the unix (and win) subdirectories.  These are now shared.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * If you are using CVS, you'll want to get the "config" module into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * this directory, or do the checkout of thread again so the config
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * module is brought in.  You should have a "config" subdirectory of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * your main thread workspace directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-04-09  Brent Welch <welch@scriptics.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Updated to compile against 8.3.1 export thread APIs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * Added Windows makefiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2000-03-27  Brent Welch <welch@scriptics.com> (proxy for Andreas Kupries)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/all.tcl: Added this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * tests/thread.test: fixed to use tcltest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   * doc/thread.n: Added this file as clone of thread.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # doc/thread.html: fixed typo
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/Makefile.in b/vendor/thread2.7.3/Makefile.in
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index a64c38b29..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,455 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Makefile.in --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This file is a Makefile for the Thread Extension.  If it has the name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  "Makefile.in" then it is a template for a Makefile;  to generate the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  actual Makefile, run "./configure", which is a configuration script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  generated by the "autoconf" program (constructs like "@foo@" will get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  replaced in the actual Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1999 Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002-2005 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Add additional lines to handle any additional AC_SUBST cases that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# have been added in a customized configure script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#SAMPLE_NEW_VAR    = @SAMPLE_NEW_VAR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Nothing of the variables below this line should need to be changed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Please check the TARGETS section below to make sure the make targets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# are correct.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The names of the source files is defined in the configure script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The object files are used for linking into the final library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This will be used when a dist target is added to the Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# It is not important to specify the directory, as long as it is the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# $(srcdir) or in the generic, win or unix subdirectory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_SOURCES        = @PKG_SOURCES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_OBJECTS        = @PKG_OBJECTS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_STUB_SOURCES = @PKG_STUB_SOURCES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PKG_TCL_SOURCES identifies Tcl runtime files that are associated with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# this package that need to be installed, if any.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_TCL_SOURCES = @PKG_TCL_SOURCES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This is a list of public header files to be installed, if any.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_HEADERS        = @PKG_HEADERS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# "PKG_LIB_FILE" refers to the library (dynamic or static as per
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configuration options) composed of the named objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_LIB_FILE       = @PKG_LIB_FILE@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lib_BINARIES       = $(PKG_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BINARIES   = $(lib_BINARIES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHELL              = @SHELL@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-srcdir             = @srcdir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-prefix             = @prefix@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec_prefix        = @exec_prefix@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-bindir             = @bindir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-libdir             = @libdir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-includedir = @includedir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-datarootdir        = @datarootdir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-datadir            = @datadir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mandir             = @mandir@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DESTDIR            =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_DIR            = $(PACKAGE_NAME)$(PACKAGE_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pkgdatadir = $(datadir)/$(PKG_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pkglibdir  = $(libdir)/$(PKG_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pkgincludedir      = $(includedir)/$(PKG_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-top_builddir       = .
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_OPTIONS    =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL            = @INSTALL@ ${INSTALL_OPTIONS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_DATA_DIR = @INSTALL_DATA_DIR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_DATA       = @INSTALL_DATA@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_PROGRAM    = @INSTALL_PROGRAM@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_SCRIPT     = @INSTALL_SCRIPT@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INSTALL_LIBRARY    = @INSTALL_LIBRARY@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_NAME       = @PACKAGE_NAME@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_VERSION    = @PACKAGE_VERSION@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC         = @CC@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS_DEFAULT     = @CFLAGS_DEFAULT@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS_WARNING     = @CFLAGS_WARNING@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EXEEXT             = @EXEEXT@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LDFLAGS_DEFAULT    = @LDFLAGS_DEFAULT@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MAKE_LIB   = @MAKE_LIB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MAKE_SHARED_LIB    = @MAKE_SHARED_LIB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MAKE_STATIC_LIB    = @MAKE_STATIC_LIB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MAKE_STUB_LIB      = @MAKE_STUB_LIB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OBJEXT             = @OBJEXT@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RANLIB             = @RANLIB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RANLIB_STUB        = @RANLIB_STUB@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHLIB_CFLAGS       = @SHLIB_CFLAGS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHLIB_LD   = @SHLIB_LD@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHLIB_LD_LIBS      = @SHLIB_LD_LIBS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STLIB_LD   = @STLIB_LD@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TCL_DEFS  = @TCL_DEFS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_BIN_DIR        = @TCL_BIN_DIR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_SRC_DIR        = @TCL_SRC_DIR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TK_BIN_DIR        = @TK_BIN_DIR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TK_SRC_DIR        = @TK_SRC_DIR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Not used, but retained for reference of what libs Tcl required
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TCL_LIBS  = @TCL_LIBS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# package without installing.  The other environment variables allow us
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# to test against an uninstalled Tcl.  Add special env vars that you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# require for testing here (like TCLX_LIBRARY).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#EXTRA_PATH        = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLLIBPATH = $(top_builddir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH_ENV  = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_ENV            = TCL_THREAD_LIBRARY=`@CYGPATH@ $(srcdir)/lib` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             PATH="$(EXTRA_PATH):$(PATH)" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             TCLLIBPATH="$(TCLLIBPATH) $(top_builddir)/../lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH_PROG = @TCLSH_PROG@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH              = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#WISH_ENV  = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#WISH_PROG = @WISH_PROG@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#WISH              = $(PKG_ENV) $(TCLSH_ENV) $(WISH_ENV) $(WISH_PROG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHARED_BUILD       = @SHARED_BUILD@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INCLUDES   = @PKG_INCLUDES@ @TCL_INCLUDES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#INCLUDES  = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PKG_CFLAGS = @PKG_CFLAGS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TCL_DEFS is not strictly need here, but if you remove it, then you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# must make sure that configure.ac checks for the necessary components
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# that your library may use.  TCL_DEFS can actually be a problem if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# you do not compile with a similar machine setup as the Tcl core was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# compiled with.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#DEFS              = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEFS               = @DEFS@ $(PKG_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CLEANFILES = @CLEANFILES@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CPPFLAGS   = @CPPFLAGS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS               = @PKG_LIBS@ @LIBS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AR         = @AR@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS             = @CFLAGS@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPILE            = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SUFFIXES: .c .$(OBJEXT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Start of user-definable TARGETS section
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA TARGETS.  Please note that the "libraries:" target refers to platform
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# independent files, and the "binaries:" target includes executable programs and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# platform-dependent libraries.  Modify these targets so that they install
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the various pieces of your package.  The make and install rules
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# for the BINARIES that you specified above have already been done.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all: binaries libraries doc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The binaries target builds executable programs, Windows .dll's, unix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# shared/static libraries, and any other platform-dependent files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The list of targets to build for "binaries:" is specified at the top
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of the Makefile, in the "BINARIES" variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-binaries: $(BINARIES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-libraries:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Your doc target should differentiate from doc builds (by the developer)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and doc installs (see install-doc), which just install the docs on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# end user machine when building from source.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doc:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install: all install-binaries install-libraries install-doc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-binaries: binaries install-lib-binaries install-bin-binaries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This rule installs platform-independent files, such as header files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The list=...; for p in $$list handles the empty list case x-platform.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-libraries: libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(INSTALL_DATA_DIR) $(DESTDIR)$(includedir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo "Installing header files in $(DESTDIR)$(includedir)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @list='$(PKG_HEADERS)'; for i in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "Installing $(srcdir)/$$i" ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Install documentation.  Unix manpages should go in the $(mandir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-doc: doc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(INSTALL_DATA_DIR) $(DESTDIR)$(mandir)/mann
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo "Installing documentation in $(DESTDIR)$(mandir)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @list='$(srcdir)/doc/man/*.n'; for i in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "Installing $$i"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       rm -f $(DESTDIR)$(mandir)/mann/`basename $$i`; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test: binaries libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -load "package ifneeded ${PACKAGE_NAME} ${PACKAGE_VERSION} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shell: binaries libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(TCLSH) $(SCRIPT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gdb:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VALGRINDARGS =     --tool=memcheck --num-callers=8 --leak-resolution=high \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           --leak-check=yes --show-reachable=yes -v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-valgrind: binaries libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-valgrindshell: binaries libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) $(SCRIPT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-depend:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# $(PKG_LIB_FILE) should be listed as part of the BINARIES variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mentioned above.  That will ensure that this target is built when you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# run "make binaries".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The $(PKG_OBJECTS) objects are created and linked into the final
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# library.  In most cases these object files will correspond to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# source files above.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(PKG_LIB_FILE): $(PKG_OBJECTS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f $(PKG_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ${MAKE_LIB}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(RANLIB) $(PKG_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f $(PKG_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ${MAKE_STUB_LIB}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(RANLIB_STUB) $(PKG_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We need to enumerate the list of .c to .o lines here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In the following lines, $(srcdir) refers to the toplevel directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# containing your extension.  If your sources are in a subdirectory,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# you will have to modify the paths to reflect this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# sample.$(OBJEXT): $(srcdir)/generic/sample.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Setting the VPATH variable to a list of paths will cause the makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# to look into these paths when resolving .c to .obj dependencies.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# As necessary, add $(srcdir):$(srcdir)/compat:....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win:$(srcdir)/macosx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.c.@OBJEXT@:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(COMPILE) -c `@CYGPATH@ $<` -o $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Distribution creation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You may need to tweak this target to make it work correctly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#COMPRESS  = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPRESS   = tar zcvf $(PKG_DIR).tar.gz $(PKG_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DIST_ROOT  = /tmp/dist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DIST_DIR   = $(DIST_ROOT)/$(PKG_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dist-clean:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dist: dist-clean
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(INSTALL_DATA_DIR) $(DIST_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license.terms \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(srcdir)/aclocal.m4 $(srcdir)/naviserver.m4 $(srcdir)/configure \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $(srcdir)/*.in $(srcdir)/configure.ac $(DIST_DIR)/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.ac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(INSTALL_DATA_DIR) $(DIST_DIR)/tclconfig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(DIST_DIR)/tclconfig/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   chmod 664 $(DIST_DIR)/tclconfig/tcl.m4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   chmod +x $(DIST_DIR)/tclconfig/install-sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(INSTALL_DATA_DIR) $(DIST_DIR)/unix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cp $(srcdir)/unix/README $(srcdir)/unix/CONFIG \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(srcdir)/unix/threadUnix.c $(DIST_DIR)/unix/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(INSTALL_DATA_DIR) $(DIST_DIR)/win
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cp $(srcdir)/win/README.txt $(srcdir)/win/CONFIG $(srcdir)/win/thread.rc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(srcdir)/win/threadWin.c $(srcdir)/win/makefile.vc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(srcdir)/win/nmakehlp.c $(srcdir)/win/pkg.vc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(srcdir)/win/rules.vc   $(srcdir)/win/thread_win.dsw \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(srcdir)/win/thread_win.dsp $(DIST_DIR)/win/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(INSTALL_DATA_DIR) $(DIST_DIR)/tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cp $(srcdir)/tcl/README $(DIST_DIR)/tcl/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   list='tests doc doc/man doc/html generic lib tcl/cmdsrv tcl/phttpd tcl/tpool';\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -d $(srcdir)/$$p ; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(INSTALL_DATA_DIR) $(DIST_DIR)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (cd $(DIST_ROOT); $(COMPRESS);)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End of user-definable section
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Don't modify the file to clean here.  Instead, set the "CLEANFILES"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# variable in configure.ac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-clean:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -test -z "$(BINARIES)" || rm -f $(BINARIES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f *.$(OBJEXT) core *.core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distclean: clean
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f *.tab.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f $(CONFIG_CLEAN_FILES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -rm -f config.cache config.log config.status
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Install binary object libraries.  On Windows this includes both .dll and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# .lib files.  Because the .lib files are not explicitly listed anywhere,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# we need to deduce their existence from the .dll file of the same name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Library files go into the lib directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In addition, this will generate the pkgIndex.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# file in the install location (assuming it can find a usable tclsh shell)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You should not have to modify this target.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-lib-binaries: binaries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(INSTALL_DATA_DIR) $(DESTDIR)$(pkglibdir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @list='$(lib_BINARIES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     if test -f $$p; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo " $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "x$$stub" = "xstub"; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ext=`echo $$p|sed -e "s/.*\.//"`; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "x$$ext" = "xdll"; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f $$lib; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     if test -f $(srcdir)/$$p; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       destp=`basename $$p`; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if test "x$(SHARED_BUILD)" = "x1"; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Install binary executables (e.g. .exe files and dependent .dll files)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This is for files that must go in the bin directory (located next to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# wish and tclsh), like dependent .dll files on Windows.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You should not have to modify this target, except to define bin_BINARIES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# above if necessary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#========================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-bin-binaries: binaries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(INSTALL_DATA_DIR) $(DESTDIR)$(bindir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @list='$(bin_BINARIES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     if test -f $$p; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cd $(top_builddir) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-uninstall-binaries:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   list='$(lib_BINARIES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     rm -f $(DESTDIR)$(pkglibdir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   list='$(PKG_TCL_SOURCES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     p=`basename $$p`; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     rm -f $(DESTDIR)$(pkglibdir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   list='$(bin_BINARIES)'; for p in $$list; do \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     rm -f $(DESTDIR)$(bindir)/$$p; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PHONY: all binaries clean depend distclean doc install libraries test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tell versions [3.59,3.63) of GNU make to not export all variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Otherwise a system limit (for SysV at least) may be exceeded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.NOEXPORT:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/README b/vendor/thread2.7.3/README
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 6c6009383..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/README
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,55 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WHAT IS THIS ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-==============
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is the source distribution of the Tcl Thread extension. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You can use this extension to gain script-level access to Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threading capabilities.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The extension can be used with Tcl cores starting from Tcl8.4 and later.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Also, this extension supports, i.e. can be used as a loadable module of,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AOLserver 4.x series of the highly-scalable web server from America Online. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You need to have your Tcl core compiled with "--enable-threads" in order
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to turn on internal directives supporting thread-specific details of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl API. The extension will not load in an Tcl shell built w/o thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-support. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This extension is a freely available open source package. You can do 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-virtually anything you like with it, such as modifying it, redistributing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-it, and selling it either in whole or in part.  See the "license.terms"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-file in the top-level distribution directory for complete information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-HOW TO COMPILE ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only Unix-like and Windows platforms are supported at the moment. Depending
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-on your platform (Unix-like or Windows) go to the appropriate directory 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(unix or win) and start with the README file. Macintosh platform is supported
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with the Mac OS X only. The Mac OS 9 (and previous) are not supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WHERE IS THE DOCUMENTATION ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-============================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Documentation in Unix man and standard HTML format is available in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doc/man and doc/html directories respectively. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Currently, documentation is in reference-style only. The tutorial-style
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-documentation will be provided with future releases of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-That is, if I ever get time to do that. Everybody is more than welcome
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to jump in and help with the docs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-HOW TO GET SUPPORT ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-====================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The extension is maintained, enhanced, and distributed freely by the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-community. The home for sources and bug/patch database is on SourceForge:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        http://tcl.sourceforge.net/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Alternatively, you are always welcome to post your questions, problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and/or suggestions relating the extension (or any other Tcl issue)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to news:comp.lang.tcl newsgroup.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--EOF-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/aclocal.m4 b/vendor/thread2.7.3/aclocal.m4
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 6744284fd..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/aclocal.m4
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,73 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Pull in the standard Tcl autoconf macros.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If you don't have the "tclconfig" subdirectory, it is a dependent CVS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# module. Either "cvs -d <root> checkout tclconfig" right here, or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# re-checkout the thread module
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-builtin(include,tclconfig/tcl.m4)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-builtin(include,naviserver.m4)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Handle the "--with-gdbm" option for linking-in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the gdbm-based peristent store for shared arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# It tries to locate gdbm files in couple of standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# system directories and/or common install locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# in addition to the directory passed by the user.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In the latter case, expect all gdbm lib files and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include files located in the same directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN(TCLTHREAD_WITH_GDBM, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_WITH(gdbm,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [  --with-gdbm             link with optional GDBM support],\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with_gdbm=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_gdbm}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for GNU gdbm library])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL(ac_cv_c_gdbm,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_gdbm}" != x -a "${with_gdbm}" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test -f "${with_gdbm}/gdbm.h" -a x"`ls ${with_gdbm}/libgdbm* 2>/dev/null`" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ac_cv_c_gdbm=`(cd ${with_gdbm}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            gincdir=$ac_cv_c_gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            glibdir=$ac_cv_c_gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_MSG_RESULT([found in $glibdir])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_MSG_ERROR([${with_gdbm} directory doesn't contain gdbm library])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${gincdir}" = x -o x"${glibdir}" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${exec_prefix}/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${prefix}/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/local/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/lib 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test x"`ls $i/libgdbm* 2>/dev/null`" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                glibdir=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${prefix}/include 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/local/include 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/include 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test -f "$i/gdbm.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                gincdir=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test x"$glibdir" = x -o x"$gincdir" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_MSG_ERROR([none found])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_MSG_RESULT([found in $glibdir, includes in $gincdir])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_DEFINE(HAVE_GDBM)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            GDBM_CFLAGS="-I\"$gincdir\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            GDBM_LIBS="-L\"$glibdir\" -lgdbm"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/configure b/vendor/thread2.7.3/configure
</span>deleted file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index e8e4a7b1c..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/configure
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,12554 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#! /bin/sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Guess values for system-dependent variables and create Makefiles.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Generated by GNU Autoconf 2.59 for thread 2.7.3.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (C) 2003 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This configure script is free software; the Free Software Foundation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# gives unlimited permission to copy, distribute and modify it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## M4sh Initialization.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Be Bourne compatible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  emulate sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  NULLCMD=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # is contrary to our usage.  Disable this feature.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  alias -g '${1+"$@"}'='"$@"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  set -o posix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DUALCASE=1; export DUALCASE # for MKS sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Support unset when possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_unset=unset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_unset=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Work around bugs in pre-3.0 UWIN ksh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset ENV MAIL MAILPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS1='$ '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS2='> '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS4='+ '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# NLS nuisances.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_var in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LC_TELEPHONE LC_TIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval $as_var=C; export $as_var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $as_unset $as_var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Required to use basename.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if expr a : '\(a\)' >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=expr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_basename=basename
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_basename=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Name of the executable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_me=`$as_basename "$0" ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(/\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    .     : '\(.\)' 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo X/"$0" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\/\(\/\/\)$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\/\(\/\).*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/.*/./; q'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PATH needs CR, and LINENO needs CR and PATH.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Avoid depending upon Character Ranges.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_digits='0123456789'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_alnum=$as_cr_Letters$as_cr_digits
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The user is always right.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${PATH_SEPARATOR+set}" != set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "#! /bin/sh" >conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo  "exit 0"   >>conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  chmod +x conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PATH_SEPARATOR=';'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PATH_SEPARATOR=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_1=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_2=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_1" != "x$as_lineno_2" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Find who we are.  Look in the path if we contain no path at all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # relative or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $0 in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *[\\/]* ) as_myself=$0 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We did not find ourselves, most probably we were run as `sh COMMAND'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # in which case we are not to be found in the path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "x$as_myself" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_myself=$0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test ! -f "$as_myself"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $CONFIG_SHELL in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  '')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for as_base in sh bash ksh sh5; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $as_dir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if ("$as_dir/$as_base" -c '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_1=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_2=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_1" != "x$as_lineno_2" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        CONFIG_SHELL=$as_dir/$as_base
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        export CONFIG_SHELL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        exec "$CONFIG_SHELL" "$0" ${1+"$@"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # uniformly replaced by the line number.  The first 'sed' inserts a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # line-number line before each line; the second 'sed' does the real
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # work.  The second script uses 'N' to pair each line-number line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # with the numbered line, and appends trailing '-' during
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # substitution so that $LINENO is not a special case at line end.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed '=' <$as_myself |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      N
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,$,-,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      : loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      t loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,-$,,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,^['$as_cr_digits']*\n,,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ' >$as_me.lineno &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  chmod +x $as_me.lineno ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Don't try to exec as it changes $[0], causing all sort of problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # (the dirname of $[0] is not the place where we might find the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # original and so on.  Autoconf is especially sensible to this).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  . ./$as_me.lineno
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Exit status is that of the last command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *c*,-n*) ECHO_N= ECHO_C='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-' ECHO_T=' ' ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if expr a : '\(a\)' >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=expr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conf$$ conf$$.exe conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo >conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if ln -s conf$$.file conf$$ 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We could just check for DJGPP; but this test a) works b) is more generic
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -f conf$$.exe; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't use ln at all; we don't have any links
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_ln_s='cp -p'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_ln_s='ln -s'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif ln conf$$.file conf$$ 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_ln_s=ln
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_ln_s='cp -p'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conf$$ conf$$.exe conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if mkdir -p . 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_mkdir_p=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -d ./-p && rmdir ./-p
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_mkdir_p=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_executable_p="test -f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sed expression to map a string onto a valid CPP name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sed expression to map a string onto a valid variable name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We need space, tab and new line, in precisely that order.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_nl='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IFS="         $as_nl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# CDPATH.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset CDPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Name of the host.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# so uname gets run too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec 6>&1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Initializations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_default_prefix=/usr/local
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_config_libobj_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cross_compiling=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-subdirs=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MFLAGS=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MAKEFLAGS=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHELL=${CONFIG_SHELL-/bin/sh}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Maximum number of lines to put in a shell here document.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This variable seems obsolete.  It should probably be removed, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# only ac_max_sed_lines should be used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-: ${ac_max_here_lines=38}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Identity of this package.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_NAME='thread'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_TARNAME='thread'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_VERSION='2.7.3'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_STRING='thread 2.7.3'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_BUGREPORT=''
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Factoring default headers for most tests.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_includes_default="\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_SYS_TYPES_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_SYS_STAT_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if STDC_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <stddef.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if HAVE_STDLIB_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_STRING_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if !STDC_HEADERS && HAVE_MEMORY_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  include <memory.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_STRINGS_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <strings.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_INTTYPES_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <inttypes.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if HAVE_STDINT_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  include <stdint.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if HAVE_UNISTD_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CYGPATH EXEEXT PKG_LIB_FILE PKG_STUB_LIB_FILE PKG_STUB_SOURCES PKG_STUB_OBJECTS PKG_TCL_SOURCES PKG_HEADERS PKG_INCLUDES PKG_LIBS PKG_CFLAGS TCL_VER [...]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_subst_files=''
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Initialize some variables set by options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_init_help=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_init_version=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The variables have the same names as the options, with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# dashes changed to underlines.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cache_file=/dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec_prefix=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no_create=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no_recursion=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-prefix=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-program_prefix=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-program_suffix=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-program_transform_name=s,x,x,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-silent=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-site=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-srcdir=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-verbose=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-x_includes=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-x_libraries=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Installation directory options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# These are left unexpanded so users can "make install exec_prefix=/foo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and all the variables that are supposed to be based on exec_prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# by default will actually change.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Use braces instead of parens because sh, perl, etc. also accept them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-bindir='${exec_prefix}/bin'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sbindir='${exec_prefix}/sbin'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-libexecdir='${exec_prefix}/libexec'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-datadir='${prefix}/share'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sysconfdir='${prefix}/etc'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sharedstatedir='${prefix}/com'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-localstatedir='${prefix}/var'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-libdir='${exec_prefix}/lib'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-includedir='${prefix}/include'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-oldincludedir='/usr/include'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-infodir='${prefix}/info'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mandir='${prefix}/man'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_prev=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # If the previous option needs an argument, assign it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_prev"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "$ac_prev=\$ac_option"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Accept the important Cygnus configure options, so we can diagnose typos.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_option in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=bindir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    bindir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -build | --build | --buil | --bui | --bu)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=build_alias ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    build_alias=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -cache-file | --cache-file | --cache-fil | --cache-fi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=cache_file ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cache_file=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --config-cache | -C)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cache_file=config.cache ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=datadir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --da=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datadir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -disable-* | --disable-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Reject names that are not valid shell variable names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "enable_$ac_feature=no" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -enable-* | --enable-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Reject names that are not valid shell variable names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $ac_option in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *) ac_optarg=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "enable_$ac_feature='$ac_optarg'" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --exec | --exe | --ex)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=exec_prefix ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --exec=* | --exe=* | --ex=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    exec_prefix=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -gas | --gas | --ga | --g)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Obsolete; use --with-gas.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    with_gas=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -help | --help | --hel | --he | -h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_init_help=long ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_init_help=recursive ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_init_help=short ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -host | --host | --hos | --ho)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=host_alias ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -host=* | --host=* | --hos=* | --ho=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    host_alias=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -includedir | --includedir | --includedi | --included | --include \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --includ | --inclu | --incl | --inc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=includedir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --includ=* | --inclu=* | --incl=* | --inc=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    includedir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -infodir | --infodir | --infodi | --infod | --info | --inf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=infodir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    infodir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -libdir | --libdir | --libdi | --libd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=libdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    libdir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --libexe | --libex | --libe)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=libexecdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --libexe=* | --libex=* | --libe=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    libexecdir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -localstatedir | --localstatedir | --localstatedi | --localstated \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --localstate | --localstat | --localsta | --localst \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --locals | --local | --loca | --loc | --lo)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=localstatedir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    localstatedir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=mandir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mandir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -nfp | --nfp | --nf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Obsolete; use --without-fp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    with_fp=no ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --no-cr | --no-c | -n)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    no_create=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    no_recursion=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --oldin | --oldi | --old | --ol | --o)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=oldincludedir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    oldincludedir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=prefix ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    prefix=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-pre | --program-pr | --program-p)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=program_prefix ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    program_prefix=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-suf | --program-su | --program-s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=program_suffix ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    program_suffix=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-transform-name | --program-transform-name \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform-nam | --program-transform-na \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform-n | --program-transform- \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform | --program-transfor \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transfo | --program-transf \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-trans | --program-tran \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --progr-tra | --program-tr | --program-t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=program_transform_name ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -program-transform-name=* | --program-transform-name=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform-nam=* | --program-transform-na=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform-n=* | --program-transform-=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transform=* | --program-transfor=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-transfo=* | --program-transf=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --program-trans=* | --program-tran=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --progr-tra=* | --program-tr=* | --program-t=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    program_transform_name=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | -silent | --silent | --silen | --sile | --sil)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    silent=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=sbindir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sbi=* | --sb=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sbindir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sharedst | --shareds | --shared | --share | --shar \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sha | --sh)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=sharedstatedir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --sha=* | --sh=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sharedstatedir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -site | --site | --sit)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=site ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -site=* | --site=* | --sit=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    site=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=srcdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    srcdir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --syscon | --sysco | --sysc | --sys | --sy)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=sysconfdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sysconfdir=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -target | --target | --targe | --targ | --tar | --ta | --t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=target_alias ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    target_alias=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    verbose=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -version | --version | --versio | --versi | --vers | -V)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_init_version=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -with-* | --with-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Reject names that are not valid shell variable names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me: error: invalid package name: $ac_package" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_package=`echo $ac_package| sed 's/-/_/g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $ac_option in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *) ac_optarg=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "with_$ac_package='$ac_optarg'" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -without-* | --without-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Reject names that are not valid shell variable names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me: error: invalid package name: $ac_package" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_package=`echo $ac_package | sed 's/-/_/g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "with_$ac_package=no" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --x)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Obsolete; use --with-x.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    with_x=yes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --x-incl | --x-inc | --x-in | --x-i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=x_includes ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    x_includes=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_prev=x_libraries ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    x_libraries=$ac_optarg ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -*) { echo "$as_me: error: unrecognized option: $ac_option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Try \`$0 --help' for more information." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Reject names that are not valid shell variable names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "$ac_envvar='$ac_optarg'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    export $ac_envvar ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # FIXME: should be removed in autoconf 3.0.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_prev"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { echo "$as_me: error: missing argument to $ac_option" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Be sure to have absolute paths.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_var in exec_prefix prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_val=$`echo $ac_var`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_val in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; };;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Be sure to have absolute paths.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         localstatedir libdir includedir oldincludedir infodir mandir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_val=$`echo $ac_var`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_val in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [\\/$]* | ?:[\\/]* ) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; };;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# There might be people who depend on the old broken behavior: `$host'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# used to hold the argument of --host etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FIXME: To remove some day.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-build=$build_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-host=$host_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target=$target_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FIXME: To remove some day.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "x$host_alias" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "x$build_alias" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cross_compiling=maybe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    If a cross compiler is detected then cross compile mode will be used." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  elif test "x$build_alias" != "x$host_alias"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cross_compiling=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_tool_prefix=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test -n "$host_alias" && ac_tool_prefix=$host_alias-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test "$silent" = yes && exec 6>/dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Find the source files, if location was not specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$srcdir"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_srcdir_defaulted=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Try the directory containing this script, then its parent.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_confdir=`(dirname "$0") 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(//\)[^/]' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(/\)' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    .     : '\(.\)' 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo X"$0" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)[^/].*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\).*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/.*/./; q'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  srcdir=$ac_confdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test ! -r $srcdir/$ac_unique_file; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    srcdir=..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_srcdir_defaulted=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test ! -r $srcdir/$ac_unique_file; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$ac_srcdir_defaulted" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_build_alias_set=${build_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_build_alias_value=$build_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_build_alias_set=${build_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_build_alias_value=$build_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_host_alias_set=${host_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_host_alias_value=$host_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_host_alias_set=${host_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_host_alias_value=$host_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_target_alias_set=${target_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_target_alias_value=$target_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_target_alias_set=${target_alias+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_target_alias_value=$target_alias
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CC_set=${CC+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CC_value=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CC_set=${CC+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CC_value=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CFLAGS_set=${CFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CFLAGS_value=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CFLAGS_set=${CFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CFLAGS_value=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_LDFLAGS_set=${LDFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_LDFLAGS_value=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_LDFLAGS_value=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CPPFLAGS_value=$CPPFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CPP_set=${CPP+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_env_CPP_value=$CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CPP_set=${CPP+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_env_CPP_value=$CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Report the --help message.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_init_help" = "long"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Omit some internal or obsolete options to make the list less imposing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # This message is too long to be a string in the A/UX 3.1 sh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\`configure' configures thread 2.7.3 to adapt to many kinds of systems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Usage: $0 [OPTION]... [VAR=VALUE]...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To assign environment variables (e.g., CC, CFLAGS...), specify them as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VAR=VALUE.  See below for descriptions of some of the useful variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Defaults for the options are specified in brackets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Configuration:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -h, --help              display this help and exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      --help=short        display options specific to this package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      --help=recursive    display the short help of all the included packages
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -V, --version           display version information and exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -q, --quiet, --silent   do not print \`checking...' messages
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      --cache-file=FILE   cache test results in FILE [disabled]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -C, --config-cache      alias for \`--cache-file=config.cache'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -n, --no-create         do not create output files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Installation directories:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --prefix=PREFIX         install architecture-independent files in PREFIX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     [$ac_default_prefix]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     [PREFIX]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-By default, \`make install' will install all the files in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for instance \`--prefix=\$HOME'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For better control, use the options below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Fine tuning of the installation directories:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --bindir=DIR           user executables [EPREFIX/bin]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --libexecdir=DIR       program executables [EPREFIX/libexec]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --libdir=DIR           object code libraries [EPREFIX/lib]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --includedir=DIR       C header files [PREFIX/include]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --infodir=DIR          info documentation [PREFIX/info]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --mandir=DIR           man documentation [PREFIX/man]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_init_help"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_init_help in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     short | recursive ) echo "Configuration of thread 2.7.3:";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional Features:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-threads        build with threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-shared         build and link with shared libraries (default: on)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-64bit          enable 64bit support (default: off)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-64bit-vis      enable 64bit Sparc VIS support (default: off)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --disable-rpath         disable rpath support (default: on)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-wince          enable Win/CE support (where applicable)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --enable-symbols        build with debugging symbols (default: off)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional Packages:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-tcl              directory containing tcl configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (tclConfig.sh)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-gdbm             link with optional GDBM support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-naviserver       directory with NaviServer/AOLserver distribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-tclinclude       directory containing the public Tcl header files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --with-celib=DIR        use Windows/CE support library from DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Some influential environment variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC          C compiler command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS      C compiler flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              nonstandard directory <lib dir>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              headers in a nonstandard directory <include dir>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CPP         C preprocessor
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use these variables to override the choices made by `configure' or to help
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-it to find libraries and programs with nonstandard names/locations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_init_help" = "recursive"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # If there are subdirs, report their specific --help.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_popdir=`pwd`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test -d $ac_dir || continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_builddir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_dir" != .; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # A "../" for each directory in $ac_dir_suffix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_dir_suffix= ac_top_builddir=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .)  # No --srcdir option.  We are building in place.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -z "$ac_top_builddir"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_top_srcdir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* )  # Absolute path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=$srcdir$ac_dir_suffix;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_top_srcdir=$srcdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) # Relative path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Do not use `cd foo && pwd` to compute absolute paths, because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the directories may not exist.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case `pwd` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_builddir="$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case "$ac_dir" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_builddir=`pwd`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_top_builddir=${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case ${ac_top_builddir}. in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_top_builddir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_srcdir=$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_srcdir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_top_srcdir=$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_top_srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cd $ac_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check for guested configure; otherwise get Cygnus style configure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f $ac_srcdir/configure.gnu; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test -f $ac_srcdir/configure; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $SHELL $ac_srcdir/configure  --help=recursive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test -f $ac_srcdir/configure.ac ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      test -f $ac_srcdir/configure.in; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $ac_configure --help
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cd $ac_popdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test -n "$ac_init_help" && exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_init_version; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread configure 2.7.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-generated by GNU Autoconf 2.59
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Copyright (C) 2003 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This configure script is free software; the Free Software Foundation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gives unlimited permission to copy, distribute and modify it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec 5>config.log
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >&5 <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This file contains any messages produced by compilers while
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-running configure, to aid debugging if configure makes a mistake.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It was created by thread $as_me 2.7.3, which was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-generated by GNU Autoconf 2.59.  Invocation command line was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $ $0 $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat <<_ASUNAME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Platform. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-uname -m = `(uname -m) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-uname -r = `(uname -r) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-uname -s = `(uname -s) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-uname -v = `(uname -v) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASUNAME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "PATH: $as_dir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >&5 <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Core tests. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Keep a trace of the command line.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Strip out --no-create and --no-recursion so they do not pile up.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Strip out --silent because we don't want to record it for future runs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Also quote any args containing shell meta-characters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Make two passes to allow for proper duplicate-argument suppression.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_configure_args=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_configure_args0=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_configure_args1=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_sep=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_must_keep_next=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_pass in 1 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $ac_arg in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    | -silent | --silent | --silen | --sile | --sil)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      continue ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *" "*|*"        "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $ac_pass in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    2)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test $ac_must_keep_next = true; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_must_keep_next=false # Got value, back to normal.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $ac_arg in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *=* | --config-cache | -C | -disable-* | --disable-* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     | -with-* | --with-* | -without-* | --without-* | --x)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case "$ac_configure_args0 " in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     -* ) ac_must_keep_next=true ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Get rid of the leading space.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_sep=" "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# When interrupted or exit'd, cleanup temporary files, and complete
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# config.log.  We remove comments because anyway the quotes in there
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# would cause problems or look ugly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# WARNING: Be sure not to use single quotes in there, as some shells,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# such as our DU 5.0 friend, will then `close' the trap.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trap 'exit_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Save into config.log some information that might help in debugging.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ---------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Cache variables. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ---------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The following way of writing the cache mishandles newlines in values,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (set) 2>&1 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *ac_space=\ *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed -n \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed -n \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Output variables. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for ac_var in $ac_subst_vars
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      eval ac_val=$`echo $ac_var`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$ac_var='"'"'$ac_val'"'"'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done | sort
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -n "$ac_subst_files"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Output files. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      for ac_var in $ac_subst_files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval ac_val=$`echo $ac_var`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$ac_var='"'"'$ac_val'"'"'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      done | sort
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -s confdefs.h; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## confdefs.h. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## ----------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "/^$/d" confdefs.h | sort
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test "$ac_signal" != 0 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$as_me: caught signal $ac_signal"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me: exit $exit_status"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  } >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f core *.core &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    exit $exit_status
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ' 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_signal in 1 2 13 15; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_signal=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# confdefs.h avoids OS command line length limits that DEFS can exceed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -rf conftest* confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo >confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Predefined preprocessor variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_NAME "$PACKAGE_NAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_VERSION "$PACKAGE_VERSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_STRING "$PACKAGE_STRING"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Let the site file select an alternate cache file if it wants to.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Prefer explicitly selected file to automatically selected ones.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CONFIG_SITE"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "x$prefix" != xNONE; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_site_file in $CONFIG_SITE; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -r "$ac_site_file"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: loading site script $ac_site_file" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed 's/^/| /' "$ac_site_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    . "$ac_site_file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -r "$cache_file"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Some versions of bash will fail to source /dev/null (special
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # files actually), so we avoid doing that.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -f "$cache_file"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: loading cache $cache_file" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $cache_file in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      [\\/]* | ?:[\\/]* ) . $cache_file;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *)                      . ./$cache_file;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: creating cache $cache_file" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  >$cache_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check that the precious variables saved in the cache have kept the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cache_corrupted=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_var in `(set) 2>&1 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_new_set=\$ac_env_${ac_var}_set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_new_val="\$ac_env_${ac_var}_value"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_old_set,$ac_new_set in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set,)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_cache_corrupted=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ,set)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_cache_corrupted=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ,);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test "x$ac_old_val" != "x$ac_new_val"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:   former value:  $ac_old_val" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:   current value: $ac_new_val" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_cache_corrupted=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Pass precious variables to config.status.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$ac_new_set" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $ac_new_val in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *" "*|*"        "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *) ac_arg=$ac_var=$ac_new_val ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case " $ac_configure_args " in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_cache_corrupted; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Call TEA_INIT as the first TEA_ macro to set up initial vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This will define a ${TEA_PLATFORM} variable == "unix" or "windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA extensions pass this us the version of TEA they think they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # are compatible with.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_VERSION="3.9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for correct TEA configuration" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for correct TEA configuration... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${PACKAGE_NAME}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { { echo "$as_me:$LINENO: error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The PACKAGE_NAME variable must be defined by your TEA configure.ac" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The PACKAGE_NAME variable must be defined by your TEA configure.ac" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"3.9" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { { echo "$as_me:$LINENO: error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA version not specified." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA version not specified." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "3.9" != "${TEA_VERSION}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: ok (TEA ${TEA_VERSION})" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}ok (TEA ${TEA_VERSION})" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the user did not set CFLAGS, set it now to keep macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${CFLAGS+set}" != "set" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case "`uname -s`" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *win32*|*WIN32*|*MINGW32_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Extract the first word of "cygpath", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy cygpath; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CYGPATH+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CYGPATH"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CYGPATH="cygpath -w"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CYGPATH=$ac_cv_prog_CYGPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CYGPATH"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CYGPATH" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CYGPATH" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *CYGWIN_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGPATH=echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA_PLATFORM is determined later in LOAD_TCLCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGPATH=echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Maybe we are cross-compiling....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case ${host_alias} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *mingw32*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXEEXT=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_PLATFORM="unix"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check if exec_prefix is set. If not use fall back to prefix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Note when adjusted, so that TEA_PREFIX can correct for this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is needed for recursive configures, since autoconf propagates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # $prefix, but not $exec_prefix (doh!).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x$exec_prefix = xNONE ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exec_prefix_default=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exec_prefix=$prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This package name must be replaced statically for AC_SUBST to work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Substitute STUB_LIB_FILE in case package creates a stub library too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # We AC_SUBST these here to ensure they are subst'ed,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in case the user doesn't call TEA_ADD_...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_aux_dir=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_dir in tclconfig $srcdir/tclconfig; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -f $ac_dir/install-sh; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_aux_dir=$ac_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_install_sh="$ac_aux_dir/install-sh -c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  elif test -f $ac_dir/install.sh; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_aux_dir=$ac_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_install_sh="$ac_aux_dir/install.sh -c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  elif test -f $ac_dir/shtool; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_aux_dir=$ac_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_install_sh="$ac_aux_dir/shtool install -c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_aux_dir"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in tclconfig $srcdir/tclconfig" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot find install-sh or install.sh in tclconfig $srcdir/tclconfig" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Load the tclConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Ok, lets find the tcl configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_tcl}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_tcl in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_tcl=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --with-tcl or --without-tcl was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${with_tcl+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  withval="$with_tcl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  with_tclconfig="${withval}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for Tcl configuration" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for Tcl configuration... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${ac_cv_c_tclconfig+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-tcl was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_tclconfig}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "${with_tclconfig}" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               */tclConfig.sh )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test -f "${with_tclconfig}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       { echo "$as_me:$LINENO: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${with_tclconfig}/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a private Tcl installation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # on Darwin, check in Framework installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Network/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /System/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/Tcl.framework/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: on Windows, check in common installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -a x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d C:/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few common install locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ${libdir} 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${exec_prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/local/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/contrib/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib64 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib/tcl8.6 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib/tcl8.5 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few other private locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_BIN_DIR="# no Tcl configs found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { { echo "$as_me:$LINENO: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_tcl=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_BIN_DIR="${ac_cv_c_tclconfig}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}found ${TCL_BIN_DIR}/tclConfig.sh" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}gcc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "gcc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy gcc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_cv_prog_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="${ac_tool_prefix}cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_cv_prog_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_prog_rejected=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_prog_rejected=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_prog_rejected = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We found a bogon in the path, so make sure we never use it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  set dummy $ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test $# != 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # We chose a different compiler from the bogus one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # However, it has the same basename, so the bogon will be chosen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # first if we set CC to just the basename; use the full file name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_prog in cl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test -n "$CC" && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_prog in cl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "$ac_prog", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy $ac_prog; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="$ac_prog"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -n "$ac_ct_CC" && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: no acceptable C compiler found in \$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Provide some information about the compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO:" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     "checking for C compiler version" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler=`set X $ac_compile; echo $2`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler --version </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler -v </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler -V </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files_save=$ac_clean_files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files="$ac_clean_files a.out a.exe b.out"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Try to create an executable without -o first, disregard a.out.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# It will help us diagnose broken compilers, and finding out an intuition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of exeext.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link_default) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Find the output, starting from the most likely.  This scheme is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# resort.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Be careful to initialize this variable, since it used to be cached.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_exeext=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# b.out is created by i960 compilers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -f "$ac_file" || continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_file in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    conftest.$ac_ext )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This is the source file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [ab].out )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # We found the default executable, but exeext='' is most
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # certainly right.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *.* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # FIXME: I believe we export ac_cv_exeext for Libtool,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # but it would be cool to find out if it's true.  Does anybody
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # maintain Libtool? --akim.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   export ac_cv_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: C compiler cannot create executables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 77); exit 77; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_exeext=$ac_cv_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_file" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check the compiler produces executables we can run.  If not, either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the compiler is broken, or we cross compile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If not cross compiling, check that we can run a simple program.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$cross_compiling" != yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if { ac_try='./$ac_file'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cross_compiling=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$cross_compiling" = maybe; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cross_compiling=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If you meant to cross compile, use \`--host'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot run C compiled programs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If you meant to cross compile, use \`--host'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: yes" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}yes" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f a.out a.exe conftest$ac_cv_exeext b.out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files=$ac_clean_files_save
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check the compiler produces executables we can run.  If not, either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the compiler is broken, or we cross compile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $cross_compiling" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$cross_compiling" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for suffix of executables" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# work properly (i.e., refer to `conftest.exe'), while it won't with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# `rm'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_file in conftest.exe conftest conftest.*; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -f "$ac_file" || continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_file in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     export ac_cv_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * ) break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest$ac_cv_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_exeext" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EXEEXT=$ac_cv_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_exeext=$EXEEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for suffix of object files" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_objext+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.o conftest.obj
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_file in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot compute suffix of object files: cannot compile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_cv_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_objext" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OBJEXT=$ac_cv_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_objext=$OBJEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_c_compiler_gnu+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __GNUC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_compiler_gnu=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_c_compiler_gnu=$ac_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GCC=`test $ac_compiler_gnu = yes && echo yes`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_test_CFLAGS=${CFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_save_CFLAGS=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_cc_g+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_g=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_prog_cc_g=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_test_CFLAGS" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS=$ac_save_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif test $ac_cv_prog_cc_g = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-g -O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_cc_stdc+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_save_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct buf { int x; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FILE * (*rcsopen) (struct buf *, struct stat *, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *e (p, i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     char **p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return p[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *f (char * (*g) (char **, int), char **p, ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  char *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_list v;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_start (v,p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  s = g (p, va_arg (v,int));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_end (v);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   function prototypes and stuff, but not '\xHH' hex character constants.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   These don't provoke an error unfortunately, instead are silently treated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   as 'x'.  The following induces an error, until -std1 is added to get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   array size at least.  It's necessary to write '\x00'==0 to get something
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   that's true only with -std1.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int test (int i, double x);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct s1 {int (*f) (int a);};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct s2 {int (*f) (double a);};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int argc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char **argv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Don't try gcc -ansi; that turns off useful extensions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# breaks some systems' header files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# AIX                      -qlanglvl=ansi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Ultrix and OSF/1 -std1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HP-UX 10.20 and later    -Ae
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HP-UX older versions     -Aa -D_HPUX_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# SVR4                     -Xc -D__EXTENSIONS__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_save_CC $ac_arg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_stdc=$ac_arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_ext conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_save_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case "x$ac_cv_prog_cc_stdc" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  x|xno)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: none needed" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}none needed" >&6 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CC="$CC $ac_cv_prog_cc_stdc" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Some people use a C++ compiler to compile C.  Since we use `exit',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# in C++ we need to declare it.  In case someone uses the same compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# for both compiling C and C++ we need to have the C++ compiler decide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the declaration of exit, since it's the most demanding environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_declaration in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   '' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void std::exit (int) throw (); using std::exit;' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void std::exit (int); using std::exit;' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void exit (int) throw ();' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void exit (int);' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'void exit (int);'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_declaration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit (42);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_declaration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit (42);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_declaration"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo '#ifdef __cplusplus' >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ac_declaration      >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo '#endif'             >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        echo "$as_me:$LINENO: result: loading" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}loading" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   . "${TCL_BIN_DIR}/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        echo "$as_me:$LINENO: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TCL_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the TCL_BIN_DIR is the build directory (not the install directory),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # then set the common variable name to the value of the build variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # For example, the variable TCL_LIB_SPEC will be set to the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # installed and uninstalled version of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # If Tcl was built as a framework, attempt to use the libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # from the framework at the given location so that linking works
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # against Tcl.framework installed in an arbitrary location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *TCL_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TCL_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking platform" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking platform... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hold_cc=$CC; CC="$TCL_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #error win32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  TEA_PLATFORM="unix"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CC=$hold_cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $TEA_PLATFORM" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$TEA_PLATFORM" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The BUILD_$pkg is to define the correct extern storage class
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # handling when making this package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define BUILD_${PACKAGE_NAME}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do this here as we have fully defined TEA_PLATFORM now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TCL_MAJOR_VERSION}" -ne 8 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: ${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TCL_MINOR_VERSION}" -lt 4 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: ${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Load the tkConfig.sh file if necessary (Tk extension)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PATH_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_LOAD_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Handle the --prefix=... option by defaulting to what Tcl gave.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${prefix}" = "NONE"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix_default=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${TCL_PREFIX}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { echo "$as_me:$LINENO: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       prefix=${TCL_PREFIX}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { echo "$as_me:$LINENO: --prefix defaulting to /usr/local" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: --prefix defaulting to /usr/local" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       prefix=/usr/local
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -o x"${exec_prefix_default}" = x"yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${TCL_EXEC_PREFIX}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { echo "$as_me:$LINENO: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exec_prefix=${TCL_EXEC_PREFIX}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { echo "$as_me:$LINENO: --exec-prefix defaulting to ${prefix}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exec_prefix=$prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Standard compiler checks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This sets up CC by using the CC env var, or looks for gcc otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This also calls AC_PROG_CC and a few others to create the basic setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# necessary to compile executables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}gcc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "gcc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy gcc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_cv_prog_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="${ac_tool_prefix}cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_cv_prog_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "cc", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy cc; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_prog_rejected=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_prog_rejected=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="cc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_prog_rejected = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We found a bogon in the path, so make sure we never use it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  set dummy $ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test $# != 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # We chose a different compiler from the bogus one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # However, it has the same basename, so the bogon will be chosen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # first if we set CC to just the basename; use the full file name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_prog in cl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CC="$CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_cv_prog_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test -n "$CC" && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_prog in cl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "$ac_prog", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy $ac_prog; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_CC="$ac_prog"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_CC=$ac_cv_prog_ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_CC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_CC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -n "$ac_ct_CC" && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC=$ac_ct_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: no acceptable C compiler found in \$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Provide some information about the compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO:" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     "checking for C compiler version" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler=`set X $ac_compile; echo $2`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler --version </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler -v </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compiler -V </dev/null >&5) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_c_compiler_gnu+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __GNUC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_compiler_gnu=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_c_compiler_gnu=$ac_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GCC=`test $ac_compiler_gnu = yes && echo yes`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_test_CFLAGS=${CFLAGS+set}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_save_CFLAGS=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_cc_g+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_g=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_prog_cc_g=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_test_CFLAGS" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS=$ac_save_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif test $ac_cv_prog_cc_g = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-g -O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="-O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_cc_stdc+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_save_CC=$CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct buf { int x; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FILE * (*rcsopen) (struct buf *, struct stat *, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *e (p, i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     char **p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return p[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *f (char * (*g) (char **, int), char **p, ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  char *s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_list v;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_start (v,p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  s = g (p, va_arg (v,int));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  va_end (v);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   function prototypes and stuff, but not '\xHH' hex character constants.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   These don't provoke an error unfortunately, instead are silently treated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   as 'x'.  The following induces an error, until -std1 is added to get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   array size at least.  It's necessary to write '\x00'==0 to get something
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   that's true only with -std1.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int test (int i, double x);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct s1 {int (*f) (int a);};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct s2 {int (*f) (double a);};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int argc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char **argv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Don't try gcc -ansi; that turns off useful extensions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# breaks some systems' header files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# AIX                      -qlanglvl=ansi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Ultrix and OSF/1 -std1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HP-UX 10.20 and later    -Ae
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HP-UX older versions     -Aa -D_HPUX_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# SVR4                     -Xc -D__EXTENSIONS__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CC="$ac_save_CC $ac_arg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_cc_stdc=$ac_arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_ext conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CC=$ac_save_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case "x$ac_cv_prog_cc_stdc" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  x|xno)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: none needed" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}none needed" >&6 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CC="$CC $ac_cv_prog_cc_stdc" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Some people use a C++ compiler to compile C.  Since we use `exit',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# in C++ we need to declare it.  In case someone uses the same compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# for both compiling C and C++ we need to have the C++ compiler decide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the declaration of exit, since it's the most demanding environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_declaration in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   '' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void std::exit (int) throw (); using std::exit;' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void std::exit (int); using std::exit;' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void exit (int) throw ();' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'extern "C" void exit (int);' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   'void exit (int);'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_declaration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit (42);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_declaration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit (42);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_declaration"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo '#ifdef __cplusplus' >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ac_declaration      >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo '#endif'             >>confdefs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# On Suns, sometimes $CPP names a directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$CPP" && test -d "$CPP"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CPP=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$CPP"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "${ac_cv_prog_CPP+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Double quotes because CPP needs to be expanded
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_preproc_ok=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_c_preproc_warn_flag in '' yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Use a header file that comes with gcc, so configuring glibc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # with a fresh cross-compiler works.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # <limits.h> exists even on freestanding compilers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # On the NeXT, cc -E runs the code through the compiler's parser,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # not just through cpp. "Syntax error" is here to catch this case.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Syntax error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Broken: fails on valid input.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # OK, works on sane cases.  Now check whether non-existent headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # can be detected and how.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <ac_nonexistent.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Broken: success on invalid input.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Passes both tests.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_preproc_ok=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_preproc_ok; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_CPP=$CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CPP=$ac_cv_prog_CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_CPP=$CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $CPP" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$CPP" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_preproc_ok=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_c_preproc_warn_flag in '' yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Use a header file that comes with gcc, so configuring glibc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # with a fresh cross-compiler works.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # <limits.h> exists even on freestanding compilers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # On the NeXT, cc -E runs the code through the compiler's parser,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # not just through cpp. "Syntax error" is here to catch this case.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Syntax error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Broken: fails on valid input.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # OK, works on sane cases.  Now check whether non-existent headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # can be detected and how.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <ac_nonexistent.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Broken: success on invalid input.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Passes both tests.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_preproc_ok=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_preproc_ok; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See \`config.log' for more details." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ext=c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cpp='$CPP $CPPFLAGS'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_compiler_gnu=$ac_cv_c_compiler_gnu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_DATA='${INSTALL} -m 644'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_PROGRAM='${INSTALL}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_SCRIPT='${INSTALL}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_LIBRARY='${INSTALL_DATA}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Checks to see if the make program sets the $MAKE variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.make <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo 'ac_maketemp="$(MAKE)"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_maketemp"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_cv_prog_make_${ac_make}_set=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval ac_cv_prog_make_${ac_make}_set=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.make
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: yes" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}yes" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  SET_MAKE=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  SET_MAKE="MAKE=${MAKE-make}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Find ranlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_RANLIB+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RANLIB=$ac_cv_prog_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $RANLIB" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$RANLIB" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_RANLIB=$RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "ranlib", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ranlib; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_RANLIB="ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_RANLIB" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RANLIB=$ac_ct_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RANLIB="$ac_cv_prog_RANLIB"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Determines the correct binary file extension (.o, .obj, .exe etc.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for egrep" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_egrep+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    then ac_cv_prog_egrep='grep -E'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else ac_cv_prog_egrep='egrep'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EGREP=$ac_cv_prog_egrep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_stdc+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <float.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_stdc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_header_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_stdc = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "memchr" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_stdc = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "free" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_stdc = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$cross_compiling" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <ctype.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if ((' ' & 0x0FF) == 0x020)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define ISLOWER(c) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              (('a' <= (c) && (c) <= 'i') \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || ('j' <= (c) && (c) <= 'r') \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || ('s' <= (c) && (c) <= 'z'))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for (i = 0; i < 256; i++)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (XOR (islower (i), ISLOWER (i))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   || toupper (i) != TOUPPER (i))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      exit(2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit (0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: program exited with status $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-( exit $ac_status )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_header_stdc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_stdc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_stdc = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define STDC_HEADERS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             inttypes.h stdint.h unistd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_header" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${$as_ac_Header+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <$ac_header>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval "$as_ac_Header=yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-eval "$as_ac_Header=no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test `eval echo '${'$as_ac_Header'}'` = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # It makes compiling go faster.  (This is only a performance feature.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -z "$no_pipe" -a -n "$GCC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking if the compiler understands -pipe" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if the compiler understands -pipe... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cc_pipe+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cc_pipe=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cc_pipe=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS=$hold_cflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cc_pipe" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cc_pipe" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test $tcl_cv_cc_pipe = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS="$CFLAGS -pipe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Common compiler flag setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_c_bigendian+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # See if sys/param.h defines the BYTE_ORDER macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/param.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bogus endian macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # It does; now see whether it defined to BIG_ENDIAN or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/param.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if BYTE_ORDER != BIG_ENDIAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- not big endian
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_c_bigendian=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_c_bigendian=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# It does not; compile a test program.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$cross_compiling" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # try to guess the endianness by grepping values into an object file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_c_bigendian=unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _ascii (); _ebcdic ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_c_bigendian=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$ac_cv_c_bigendian" = unknown; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_c_bigendian=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # finding both strings is unlikely to happen, but who knows?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_c_bigendian=unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  /* Are we little or big endian?  From Harbison&Steele.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  union
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    long l;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char c[sizeof (long)];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  } u;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  u.l = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit (u.c[sizeof (long) - 1] == 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_c_bigendian=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: program exited with status $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-( exit $ac_status )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_c_bigendian=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_c_bigendian" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_cv_c_bigendian in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WORDS_BIGENDIAN 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: unknown endianness
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-presetting ac_cv_c_bigendian=no (or yes) will help" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: unknown endianness
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; } ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "unix" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # On a few very rare systems, all of the libm.a stuff is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # already in libc.a.  Set compiler flags accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Also, Linux requires the "ieee" library for math to work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # right (and it must appear before "-lm").
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for sin" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for sin... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_func_sin+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define sin to an innocuous variant, in case <limits.h> declares sin.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define sin innocuous_sin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char sin (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef sin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char sin ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_sin) || defined (__stub___sin)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = sin;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != sin;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_func_sin=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_func_sin=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_func_sin" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_func_sin" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_func_sin = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  MATH_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  MATH_LIBS="-lm"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for main in -lieee" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for main in -lieee... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_ieee_main+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lieee  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_ieee_main=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_ieee_main=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_ieee_main" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_ieee_main" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_ieee_main = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  MATH_LIBS="-lieee $MATH_LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Interactive UNIX requires -linet instead of -lsocket, plus it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # needs net/errno.h to define the socket-related error codes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for main in -linet" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for main in -linet... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_inet_main+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-linet  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_inet_main=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_inet_main=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_inet_main" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_inet_main" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_inet_main = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS="$LIBS -linet"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_net_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for net/errno.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for net/errno.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_net_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_net_errno_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_net_errno_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking net/errno.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking net/errno.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <net/errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking net/errno.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking net/errno.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <net/errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: net/errno.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: net/errno.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for net/errno.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for net/errno.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_net_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_net_errno_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_net_errno_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_net_errno_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_net_errno_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_NET_ERRNO_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      Check for the existence of the -lsocket and -lnsl libraries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      The order here is important, so that they end up in the right
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      order in the command line generated by make.  Here are some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      special considerations:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      1. Use "connect" and "accept" to check for -lsocket, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         "gethostbyname" to check for -lnsl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      2. Use each function name only once:  can't redo a check because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         autoconf caches the results of the last check and won't redo it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      3. Use -lnsl and -lsocket only if they supply procedures that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         aren't already present in the normal libraries.  This is because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         IRIX 5.2 has libraries, but they aren't needed and they're
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         bogus:  they goof up name resolution if used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      4. On some SVR4 systems, can't use -lsocket without -lnsl too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         To get around this problem, check for both libraries together
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         if -lsocket doesn't work by itself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tcl_checkBoth=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for connect" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for connect... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_func_connect+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define connect to an innocuous variant, in case <limits.h> declares connect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define connect innocuous_connect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char connect (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef connect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char connect ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_connect) || defined (__stub___connect)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = connect;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != connect;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_func_connect=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_func_connect=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_func_connect" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_func_connect = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_checkSocket=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_checkSocket=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_checkSocket" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for setsockopt" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for setsockopt... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_func_setsockopt+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define setsockopt to an innocuous variant, in case <limits.h> declares setsockopt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define setsockopt innocuous_setsockopt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char setsockopt (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef setsockopt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char setsockopt ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_setsockopt) || defined (__stub___setsockopt)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = setsockopt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != setsockopt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_func_setsockopt=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_func_setsockopt=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_func_setsockopt" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_func_setsockopt" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_func_setsockopt = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for setsockopt in -lsocket" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for setsockopt in -lsocket... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_socket_setsockopt+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lsocket  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char setsockopt ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-setsockopt ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_socket_setsockopt=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_socket_setsockopt=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_socket_setsockopt" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_socket_setsockopt" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_socket_setsockopt = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS="$LIBS -lsocket"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_checkBoth=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_checkBoth" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tk_oldLibs=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LIBS="$LIBS -lsocket -lnsl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for accept" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for accept... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_func_accept+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define accept to an innocuous variant, in case <limits.h> declares accept.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define accept innocuous_accept
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char accept (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef accept
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char accept ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_accept) || defined (__stub___accept)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = accept;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != accept;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_func_accept=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_func_accept=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_func_accept" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_func_accept" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_func_accept = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_checkNsl=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS=$tk_oldLibs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for gethostbyname" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_func_gethostbyname+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define gethostbyname innocuous_gethostbyname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char gethostbyname (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef gethostbyname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char gethostbyname ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = gethostbyname;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != gethostbyname;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_func_gethostbyname=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_func_gethostbyname=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_func_gethostbyname = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lnsl  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char gethostbyname ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gethostbyname ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_nsl_gethostbyname=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_nsl_gethostbyname=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_nsl_gethostbyname = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS="$LIBS -lnsl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: Don't perform the eval of the libraries here because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking dirent.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking dirent.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_dirent_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dirent.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _POSIX_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ifdef __Lynx__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Generate compilation error to make the test fail:  Lynx headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * are only valid if really in the POSIX environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   missing_procedure();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DIR *d;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct dirent *entryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-d = opendir("foobar");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-entryPtr = readdir(d);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-p = entryPtr->d_name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-closedir(d);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_dirent_h=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_dirent_h=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_dirent_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_dirent_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_dirent_h = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_DIRENT_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for errno.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for errno.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_errno_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking errno.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking errno.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking errno.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking errno.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for errno.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for errno.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_errno_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_errno_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_errno_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_errno_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_ERRNO_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_float_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for float.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for float.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_float_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_float_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking float.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking float.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <float.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking float.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking float.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <float.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: float.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: float.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for float.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for float.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_float_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_float_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_float_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_float_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_FLOAT_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_values_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for values.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for values.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_values_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_values_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_values_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking values.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking values.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <values.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking values.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking values.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <values.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: values.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: values.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for values.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for values.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_values_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_values_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_values_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_values_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_values_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_VALUES_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_limits_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for limits.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for limits.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_limits_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_limits_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_limits_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking limits.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking limits.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking limits.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking limits.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: limits.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: limits.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for limits.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for limits.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_limits_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_limits_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_limits_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_limits_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_limits_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_LIMITS_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_LIMITS_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_stdlib_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for stdlib.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_stdlib_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking stdlib.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking stdlib.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking stdlib.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking stdlib.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: stdlib.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: stdlib.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for stdlib.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_stdlib_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_stdlib_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_stdlib_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "strtol" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "strtoul" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "strtod" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_ok = 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_STDLIB_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_string_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for string.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for string.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_string_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_string_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking string.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking string.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking string.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking string.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: string.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: string.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for string.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for string.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_string_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_string_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_string_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_string_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "strstr" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "strerror" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # See also memmove check below for a place where NO_STRING_H can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # set and why.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_ok = 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_STRING_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_sys_wait_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for sys/wait.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for sys/wait.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_sys_wait_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking sys/wait.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking sys/wait.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/wait.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking sys/wait.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking sys/wait.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/wait.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: sys/wait.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: sys/wait.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for sys/wait.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for sys/wait.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_sys_wait_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_sys_wait_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_sys_wait_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_SYS_WAIT_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_header_dlfcn_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for dlfcn.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_dlfcn_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking dlfcn.h usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking dlfcn.h usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking dlfcn.h presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking dlfcn.h presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dlfcn.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for dlfcn.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_header_dlfcn_h+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_header_dlfcn_h=$ac_header_preproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_header_dlfcn_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_DLFCN_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_header in sys/param.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${$as_ac_Header+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: checking for $ac_header" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${$as_ac_Header+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Is the header compilable?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking $ac_header usability" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$ac_includes_default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <$ac_header>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_compiler=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_header_compiler=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_compiler" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Is the header present?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking $ac_header presence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <$ac_header>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } >/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -s conftest.err; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_c_preproc_warn_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cpp_err=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cpp_err=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cpp_err"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_header_preproc=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_header_preproc" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So?  What about this header?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  yes:no: )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_header_preproc=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  no:yes:* )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cat <<\_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Report this to the thread lists.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ) |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "s/^/$as_me: WARNING:     /" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_header" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${$as_ac_Header+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval "$as_ac_Header=\$ac_header_preproc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test `eval echo '${'$as_ac_Header'}'` = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Let the user call this, because if it triggers, they will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # need a compat/strtod.c that is correct.  Users can also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # use Tcl_GetDouble(FromObj) instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #TEA_BUGGY_STRTOD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check if building with optional Gdbm package. This will declare
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# GDBM_CFLAGS and GDBM_LIBS variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --with-gdbm or --without-gdbm was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${with_gdbm+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  withval="$with_gdbm"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   with_gdbm=${withval}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_gdbm}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for GNU gdbm library" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for GNU gdbm library... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_c_gdbm+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_gdbm}" != x -a "${with_gdbm}" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test -f "${with_gdbm}/gdbm.h" -a x"`ls ${with_gdbm}/libgdbm* 2>/dev/null`" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ac_cv_c_gdbm=`(cd ${with_gdbm}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            gincdir=$ac_cv_c_gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            glibdir=$ac_cv_c_gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            echo "$as_me:$LINENO: result: found in $glibdir" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}found in $glibdir" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            { { echo "$as_me:$LINENO: error: ${with_gdbm} directory doesn't contain gdbm library" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${with_gdbm} directory doesn't contain gdbm library" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${gincdir}" = x -o x"${glibdir}" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${exec_prefix}/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${prefix}/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/local/lib 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/lib 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test x"`ls $i/libgdbm* 2>/dev/null`" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                glibdir=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d ${prefix}/include 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/local/include 2>/dev/null`\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                `ls -d /usr/include 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test -f "$i/gdbm.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                gincdir=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test x"$glibdir" = x -o x"$gincdir" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            { { echo "$as_me:$LINENO: error: none found" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: none found" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            echo "$as_me:$LINENO: result: found in $glibdir, includes in $gincdir" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}found in $glibdir, includes in $gincdir" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_GDBM 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            GDBM_CFLAGS="-I\"$gincdir\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            GDBM_LIBS="-L\"$glibdir\" -lgdbm"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Locate the NaviServer/AOLserver dir for compilation as NaviServer/AOLserver module.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This will declare NS_INCLUDES, NS_LIBS and define NS_AOLSERVER.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for NaviServer/AOLserver configuration" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for NaviServer/AOLserver configuration... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --with-naviserver or --without-naviserver was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${with_naviserver+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  withval="$with_naviserver"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    with_naviserver=${withval}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_c_naviserver+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_naviserver}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test -f "${with_naviserver}/include/ns.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ac_cv_c_naviserver=`(cd ${with_naviserver}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            { { echo "$as_me:$LINENO: error: ${with_naviserver} directory doesn't contain ns.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${with_naviserver} directory doesn't contain ns.h" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${ac_cv_c_naviserver}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        echo "$as_me:$LINENO: result: none found" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}none found" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        NS_DIR=${ac_cv_c_naviserver}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        echo "$as_me:$LINENO: result: found NaviServer/AOLserver in $NS_DIR" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}found NaviServer/AOLserver in $NS_DIR" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        NS_INCLUDES="-I\"${NS_DIR}/include\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "`uname -s`" = Darwin ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            aollibs=`ls ${NS_DIR}/lib/libns* 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test x"$aollibs" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                NS_LIBS="-L\"${NS_DIR}/lib\" -lnsd -lnsthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NS_AOLSERVER 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Specify the C source files to compile in TEA_ADD_SOURCES,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# public headers that need to be installed in TEA_ADD_HEADERS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# stub library C source files to compile in TEA_ADD_STUB_SOURCES,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and runtime Tcl library files in TEA_ADD_TCL_SOURCES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and PKG_TCL_SOURCES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="generic/threadNs.c           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadCmd.c          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvCmd.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSpCmd.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadPoolCmd.c      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/psGdbm.c             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvListCmd.c    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvKeylistCmd.c \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/tclXkeylist.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $i in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       \$*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # allow $-var names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # To add more dirs here (like 'src'), you have to update VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # in Makefile.in as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: could not find source file '$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find source file '$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="generic/tclThread.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence, be strict because it is installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { { echo "$as_me:$LINENO: error: could not find header file '${srcdir}/$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find header file '${srcdir}/$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_HEADERS="$PKG_HEADERS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="${NS_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_INCLUDES="$PKG_INCLUDES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="${GDBM_LIBS} ${NS_LIBS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_LIBS="$PKG_LIBS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PKG_CFLAGS="$PKG_CFLAGS ${GDBM_CFLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { { echo "$as_me:$LINENO: error: could not find stub source file '$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find stub source file '$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="lib/ttrace.tcl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence, be strict because it is installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { { echo "$as_me:$LINENO: error: could not find tcl source file '${srcdir}/$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find tcl source file '${srcdir}/$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# A few miscellaneous platform-specific items:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Define a special symbol for Windows (BUILD_sample in this case) so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# that we create the export library with the dll.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Windows creates a few extra files that need to be cleaned up.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You can add more files to clean if your extension creates any extra
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_* any platform specific compiler/build info here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="win/threadWin.c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $i in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       \$*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # allow $-var names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # To add more dirs here (like 'src'), you have to update VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # in Makefile.in as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: could not find source file '$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find source file '$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="-I\"$(${CYGPATH} ${srcdir}/win)\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_INCLUDES="$PKG_INCLUDES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="unix/threadUnix.c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $i in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       \$*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # allow $-var names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # To add more dirs here (like 'src'), you have to update VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # in Makefile.in as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: could not find source file '$i'" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find source file '$i'" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Choose which headers you need.  Extension authors should try very
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# hard to only rely on the Tcl public header files.  Internal headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# contain private data structures and are subject to change without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# notice.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for Tcl public headers" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for Tcl public headers... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --with-tclinclude or --without-tclinclude was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${with_tclinclude+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  withval="$with_tclinclude"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  with_tclinclude=${withval}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${ac_cv_c_tclh+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Use the value from --with-tclinclude, if it was given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${with_tclinclude}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${with_tclinclude}/tcl.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ac_cv_c_tclh=${with_tclinclude}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           { { echo "$as_me:$LINENO: error: ${with_tclinclude} directory does not contain tcl.h" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${with_tclinclude} directory does not contain tcl.h" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # If Tcl was built as a framework, attempt to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # the framework's Headers directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *TCL_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Look in the source dir only if Tcl is not installed,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # and in that situation, look there before installed locations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check order: pkg --prefix location, Tcl's --prefix location,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # relative to directory of tclConfig.sh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval "temp_includedir=${includedir}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list="$list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${temp_includedir}        2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list /usr/local/include /usr/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${TCL_INCLUDE_SPEC}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               list="$list `ls -d ${d} 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "$i/tcl.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tclh=$i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Print a message based on how we determined the include path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${ac_cv_c_tclh}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { { echo "$as_me:$LINENO: error: tcl.h not found.  Please specify its location with --with-tclinclude" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: tcl.h not found.  Please specify its location with --with-tclinclude" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: ${ac_cv_c_tclh}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}${ac_cv_c_tclh}" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Convert to a native path and substitute into the output files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PRIVATE_TCL_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PUBLIC_TK_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PRIVATE_TK_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PATH_X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --enable-threads or --disable-threads was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This auto-enables if Tcl was compiled threaded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-threads or --disable-threads was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_threads+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_threads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${enable_threads+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   enableval="$enable_threads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_THREADS=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" != "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We are always OK on Windows, so check what this platform wants:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # USE_THREAD_ALLOC tells us to try the special thread-based
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # allocator that significantly reduces lock contention
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define USE_THREAD_ALLOC 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _REENTRANT 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "SunOS" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _POSIX_PTHREAD_SEMANTICS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _THREAD_SAFE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking for pthread_mutex_init in -lpthread" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for pthread_mutex_init in -lpthread... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_pthread_pthread_mutex_init+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lpthread  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_pthread_pthread_mutex_init=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_pthread_pthread_mutex_init=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_mutex_init" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Check a little harder for __pthread_mutex_init in the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # library, as some systems hide it there until pthread.h is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # defined.  We could alternatively do an AC_TRY_COMPILE with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # pthread.h, but that will work with libpthread really doesn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # exist, like AIX 4.2.  [Bug: 4359]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo "$as_me:$LINENO: checking for __pthread_mutex_init in -lpthread" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for __pthread_mutex_init in -lpthread... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_pthread___pthread_mutex_init+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lpthread  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char __pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-__pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_pthread___pthread_mutex_init=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_pthread___pthread_mutex_init=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_pthread___pthread_mutex_init" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_pthread___pthread_mutex_init = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           THREADS_LIBS=" -lpthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo "$as_me:$LINENO: checking for pthread_mutex_init in -lpthreads" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for pthread_mutex_init in -lpthreads... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_pthreads_pthread_mutex_init+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lpthreads  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_pthreads_pthread_mutex_init=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_pthreads_pthread_mutex_init=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_pthreads_pthread_mutex_init" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_pthreads_pthread_mutex_init = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               THREADS_LIBS=" -lpthreads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               echo "$as_me:$LINENO: checking for pthread_mutex_init in -lc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for pthread_mutex_init in -lc... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_c_pthread_mutex_init+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lc  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_c_pthread_mutex_init=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_c_pthread_mutex_init=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_c_pthread_mutex_init" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_c_pthread_mutex_init" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_c_pthread_mutex_init = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   echo "$as_me:$LINENO: checking for pthread_mutex_init in -lc_r" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for pthread_mutex_init in -lc_r... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_c_r_pthread_mutex_init+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lc_r  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pthread_mutex_init ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_c_r_pthread_mutex_init=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_c_r_pthread_mutex_init=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_c_r_pthread_mutex_init" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_c_r_pthread_mutex_init = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       THREADS_LIBS=" -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TCL_THREADS=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       { echo "$as_me:$LINENO: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_THREADS=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do checking message here to not mess up interleaved configure output
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for building with threads" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for building with threads... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TCL_THREADS}" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_THREADS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: yes (default)" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}yes (default)" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TCL_THREADS sanity checking.  See if our request for building with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # threads is the same as the way Tcl was built.  If not, warn the user.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *THREADS=1*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "0"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           { echo "$as_me:$LINENO: WARNING:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    that IS thread-enabled.  It is recommended to use --enable-threads." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    that IS thread-enabled.  It is recommended to use --enable-threads." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           { echo "$as_me:$LINENO: WARNING:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --enable-threads requested, but building against a Tcl that is NOT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread-enabled.  This is an OK configuration that will also run in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    a thread-enabled core." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --enable-threads requested, but building against a Tcl that is NOT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread-enabled.  This is an OK configuration that will also run in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    a thread-enabled core." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The statement below defines a collection of symbols related to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# building as a shared library instead of a static library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking how to build libraries" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking how to build libraries... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-shared or --disable-shared was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_shared+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${enable_shared+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   enableval="$enable_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: shared" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}shared" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SHARED_BUILD=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: static" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}static" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SHARED_BUILD=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define STATIC_BUILD 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This macro figures out what flags to use with the compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# when building shared/static debug/optimized objects.  This information
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# can be taken from the tclConfig.sh file, but this figures it all out.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_RANLIB+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RANLIB=$ac_cv_prog_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $RANLIB" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$RANLIB" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_RANLIB=$RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "ranlib", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ranlib; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_RANLIB="ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_RANLIB"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_RANLIB" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RANLIB=$ac_ct_RANLIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RANLIB="$ac_cv_prog_RANLIB"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.a: Enable 64 bit support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking if 64bit support is requested" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if 64bit support is requested... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-64bit or --disable-64bit was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_64bit+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_64bit"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do64bit=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do64bit=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $do64bit" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$do64bit" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.b: Enable Solaris 64 bit VIS support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking if 64bit Sparc VIS support is requested" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if 64bit Sparc VIS support is requested... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-64bit-vis or --disable-64bit-vis was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_64bit_vis+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_64bit_vis"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do64bitVIS=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do64bitVIS=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $do64bitVIS" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$do64bitVIS" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Force 64bit on with VIS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$do64bitVIS" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do64bit=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.c: Check if visibility support is available. Do this here so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # that platform specific alternatives can be used below if this fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking if compiler supports visibility \"hidden\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if compiler supports visibility \"hidden\"... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cc_visibility_hidden+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       extern __attribute__((__visibility__("hidden"))) void f(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       void f(void) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-f();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cc_visibility_hidden=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cc_visibility_hidden=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS=$hold_cflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cc_visibility_hidden" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cc_visibility_hidden" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_cc_visibility_hidden = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define MODULE_SCOPE extern __attribute__((__visibility__("hidden")))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_HIDDEN 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.d: Disable -rpath support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking if rpath support is requested" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if rpath support is requested... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-rpath or --disable-rpath was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_rpath+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_rpath"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doRpath=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doRpath=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: $doRpath" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$doRpath" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: Cross-compiling options for Windows/CE builds?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = windows; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking if Windows/CE build is requested" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if Windows/CE build is requested... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check whether --enable-wince or --disable-wince was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_wince+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_wince"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doWince=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doWince=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: $doWince" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$doWince" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Set the variable "system" to hold the name and version number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # for the system.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking system version" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking system version... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_sys_version+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_sys_version=windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_sys_version=`uname -s`-`uname -r`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$?" -ne 0 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           { echo "$as_me:$LINENO: WARNING: can't find uname command" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: can't find uname command" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_sys_version=unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "`uname -s`" = "AIX" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_sys_version" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_sys_version" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    system=$tcl_cv_sys_version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Require ranlib early so we can override it in special cases below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Set configuration options based on system name and version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is similar to Tcl's unix/tcl.m4 except that we've added a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # "windows" case and removed some core-only vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    do64bit_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # default to '{$LIBS}' and set to "" on per-platform necessary basis
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SHLIB_LD_LIBS='${LIBS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # When ld needs options to work in 64-bit mode, put them in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # is disabled by the user. [Bug 1016796]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LDFLAGS_ARCH=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UNSHARED_LIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_LIB_VERSIONS_OK=ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS_DEBUG=-g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_OPTIMIZE=-O2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_WARNING="-Wall"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_OPTIMIZE=-O
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_WARNING=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}ar; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_AR+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$AR"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_AR="$AR" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_AR="${ac_tool_prefix}ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AR=$ac_cv_prog_AR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$AR"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $AR" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$AR" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_AR"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_AR=$AR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "ar", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ar; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_AR"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_AR="ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_AR=$ac_cv_prog_ac_ct_AR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_AR"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_AR" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  AR=$ac_ct_AR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  AR="$ac_cv_prog_AR"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    STLIB_LD='${AR} cr'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x$SHLIB_VERSION" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  SHLIB_VERSION=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  SHLIB_VERSION=".$SHLIB_VERSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   windows)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This is a 2-stage check to make sure we have the 64-bit SDK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We have to know where the SDK is installed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # MACHINE is IX86 for LINK, but this is used by the manifest,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # which requires x86|amd64|ia64.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       MACHINE="X86"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${MSSDK}x" = "xx" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               MSSDK="C:/Progra~1/Microsoft Platform SDK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PATH64=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "$do64bit" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               amd64|x64|yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   MACHINE="AMD64" ; # default to AMD64 64-bit build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ia64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   MACHINE="IA64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   PATH64="${MSSDK}/Bin/Win64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { echo "$as_me:$LINENO: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { echo "$as_me:$LINENO: WARNING: Ensure latest Platform SDK is installed" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit="no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               echo "$as_me:$LINENO: result:    Using 64-bit $MACHINE mode" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}   Using 64-bit $MACHINE mode" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok="yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: Windows/CE and 64-bit builds incompatible" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: Windows/CE and 64-bit builds incompatible" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: Windows/CE and GCC builds incompatible" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: Windows/CE and GCC builds incompatible" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-celib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_celib}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_celib in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_celib=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --with-celib or --without-celib was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${with_celib+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  withval="$with_celib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  with_celibconfig=${withval}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for Windows/CE celib directory" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for Windows/CE celib directory... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${ac_cv_c_celibconfig+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-celibconfig was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_celibconfig}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -d "${with_celibconfig}/inc" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: ${with_celibconfig} directory doesn't contain inc directory" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ${with_celibconfig} directory doesn't contain inc directory" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a celib library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_celibconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -d "$i/inc" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_celibconfig=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_celibconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { { echo "$as_me:$LINENO: error: Cannot find celib support library directory" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: Cannot find celib support library directory" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_celib=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CELIB_DIR=${ac_cv_c_celibconfig}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: found $CELIB_DIR" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}found $CELIB_DIR" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Set defaults for common evc4/PPC2003 setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Currently Tcl requires 300+, possibly 420+ for sockets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CEVERSION=420;          # could be 211 300 301 400 420 ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ARCH=ARM;               # could be ARM MIPS X86EM ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$doWince" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # If !yes then the user specified something
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # Reset ARCH to allow user to skip specifying it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ARCH=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               eval `echo $doWince | awk -F, '{ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if ($1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               }'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "x${ARCH}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ARCH=$TARGETCPU;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           OSVERSION=WCE$CEVERSION;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${WCEROOT}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test ! -d "${WCEROOT}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${SDKROOT}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SDKROOT="C:/Program Files/Windows CE Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test ! -d "${SDKROOT}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SDKROOT="C:/Windows CE Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { { echo "$as_me:$LINENO: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               doWince="no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # We could PATH_NOSPACE these, but that's not important,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # as long as we quote them when used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" != "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "${SHARED_BUILD}" = "0" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               runtime=-MT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               runtime=-MD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # All this magic is necessary for the Win64 SDK RC1 - hobbs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC="\"${PATH64}/cl.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="\"${MSSDK}/bin/rc.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="\"${PATH64}/link.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # Avoid 'unresolved external symbol __security_cookie'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # errors, c.f. http://support.microsoft.com/?id=894573
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="bufferoverflowU.lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_LIBS="$PKG_LIBS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           elif test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TARGETCPU}" = "X86"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC="\"${CEBINROOT}/cl.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC="\"${CEBINROOT}/cl${ARCH}.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               arch=`echo ${ARCH} | awk '{print tolower($0)}'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Static CE builds require static celib as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   defs="${defs} _DLL"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for i in $defs ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define $i 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _WIN32_WCE $CEVERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define UNDER_CE $CEVERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Zi -Od"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -Ox"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="\"${CEBINROOT}/link.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="rc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="-nologo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="link"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # mingw gcc mode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -n "$ac_tool_prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy ${ac_tool_prefix}windres; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_RC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$RC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_RC="$RC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_RC="${ac_tool_prefix}windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RC=$ac_cv_prog_RC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$RC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $RC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$RC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$ac_cv_prog_RC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ct_RC=$RC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Extract the first word of "windres", so it can be a program name with args.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy windres; ac_word=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_word" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_prog_ac_ct_RC+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$ac_ct_RC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for ac_exec_ext in '' $ac_executable_extensions; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cv_prog_ac_ct_RC="windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    break 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ct_RC=$ac_cv_prog_ac_ct_RC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_ct_RC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: $ac_ct_RC" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_ct_RC" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RC=$ac_ct_RC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RC="$ac_cv_prog_RC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_DEBUG="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo "$as_me:$LINENO: checking for cross-compile version of gcc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for cross-compile version of gcc... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_cross+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           #error cross-compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_cross=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_cross=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_cross" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_cross" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if test "$ac_cv_cross" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case "$do64bit" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       amd64|x64|yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC="x86_64-w64-mingw32-gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LD="x86_64-w64-mingw32-ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           AR="x86_64-w64-mingw32-ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RANLIB="x86_64-w64-mingw32-ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RC="x86_64-w64-mingw32-windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC="i686-w64-mingw32-gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LD="i686-w64-mingw32-ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           AR="i686-w64-mingw32-ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RANLIB="i686-w64-mingw32-ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RC="i686-w64-mingw32-windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${LINKBIN} -dll ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # link -lib only works when -lib is the first arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           STLIB_LD="${LINKBIN} -lib ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PATHTYPE=-w
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # For information on what debugtype is most useful, see:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # and also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # This essentially turns it all on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_DEBUG="-debug -debugtype:cv"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_OPTIMIZE="-release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_CONSOLE="-link ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AIX-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # AIX requires the _r compiler when gcc isn't being used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "${CC}" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *_r|*_r\ *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # ok ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Make sure only first arg gets _r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo "$as_me:$LINENO: result: Using $CC for compiling with threads" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}Using $CC for compiling with threads" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LIBS="$LIBS -lc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_LIBRARY_PATH_VAR="LIBPATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -q64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="-q64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RANLIB="${RANLIB} -X64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AR="${AR} -X64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD_FLAGS="-b64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -m`" = ia64; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD='${CC} -shared -Wl,-bexpall'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS="$LDFLAGS -brtl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   BeOS*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -nostart'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #-----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check for inet_ntoa in -lbind, for BeOS (which also needs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # -lsocket, even if the network functions are in -lnet which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # is always linked to, for compatibility.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #-----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking for inet_ntoa in -lbind" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for inet_ntoa in -lbind... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_bind_inet_ntoa+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lbind  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char inet_ntoa ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-inet_ntoa ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_bind_inet_ntoa=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_bind_inet_ntoa=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_bind_inet_ntoa" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_bind_inet_ntoa" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_bind_inet_ntoa = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS="$LIBS -lbind -lsocket"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   BSD/OS-4.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-export-dynamic -fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CYGWIN_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$@.a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Haiku*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking for inet_ntoa in -lnetwork" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for inet_ntoa in -lnetwork... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_network_inet_ntoa+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-lnetwork  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char inet_ntoa ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-inet_ntoa ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_network_inet_ntoa=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_network_inet_ntoa=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_network_inet_ntoa" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_network_inet_ntoa" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_network_inet_ntoa = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LIBS="$LIBS -lnetwork"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   HP-UX-*.11.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Use updated header definitions where possible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _XOPEN_SOURCE_EXTENDED 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: Needed by Tcl, but not most extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -m`" = ia64; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Use newer C++ library for C++ extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #if test "$GCC" != "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #   CPPFLAGS="-AA"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".sl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_check_lib_save_LIBS=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS="-ldld  $LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char shl_load ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shl_load ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cv_lib_dld_shl_load=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cv_lib_dld_shl_load=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBS=$ac_check_lib_save_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $ac_cv_lib_dld_shl_load = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_ok" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-E"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_LIBRARY_PATH_VAR="SHLIB_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -z"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #CFLAGS="$CFLAGS +DAportable"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="+z"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="ld -b"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               case `${CC} -dumpmachine` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   hppa64*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       # 64-bit gcc in use.  Fix flags for GNU ld.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       { echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS +DD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="+DD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   IRIX-6.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -n32 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -mabi=n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -mabi=n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               IRIX-6.3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Use to build 6.2 compatible binaries on 6.3.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CFLAGS="$CFLAGS -n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   IRIX64-6.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -n32 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { echo "$as_me:$LINENO: WARNING: 64bit mode not supported by gcc" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD="ld -64 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="-64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Linux*|GNU*|NetBSD-Debian)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -m`" = "alpha"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS="$CFLAGS -mieee"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $do64bit = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           echo "$as_me:$LINENO: checking if compiler accepts -m64 flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if compiler accepts -m64 flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cc_m64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cc_m64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cc_m64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS=$hold_cflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cc_m64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cc_m64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test $tcl_cv_cc_m64 = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # The combo of gcc + glibc has a bug related to inlining of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # functions like strtod(). The -fno-builtin flag should address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # this problem but it does not work. The -fno-inline flag is kind
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # of overkill but it works. Disable inlining only when one of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # files in compat/*.c is being linked in.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${USE_COMPAT}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS="$CFLAGS -fno-inline"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Lynx*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE=-02
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_FLAGS="-Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OpenBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       arch=`arch -s`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vax)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           alpha|sparc64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_CFLAGS="-fpic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="-Wl,-export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vax)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # On OpenBSD:   Compile with -pthread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #               Don't link with -lpthread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-lpthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # OpenBSD doesn't do version numbers with dots.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   NetBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # NetBSD has ELF and can use 'cc -shared' to build shared libs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The -pthread needs to go in the CFLAGS, not LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-pthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   FreeBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This configuration from FreeBSD Ports.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="${CC} -shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The -pthread needs to go in the LDFLAGS, not LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-pthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       FreeBSD-3.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Version numbers are dot-stripped by system policy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Darwin-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE="-Os"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fno-common"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # To avoid discrepancies between what headers configure sees during
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # preprocessing tests and compiling tests, move any -isysroot and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS="`echo " ${CFLAGS}" | \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $do64bit = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case `arch` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ppc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   echo "$as_me:$LINENO: checking if compiler accepts -arch ppc64 flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if compiler accepts -arch ppc64 flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cc_arch_ppc64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cc_arch_ppc64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cc_arch_ppc64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS=$hold_cflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cc_arch_ppc64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cc_arch_ppc64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test $tcl_cv_cc_arch_ppc64 = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               i386)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   echo "$as_me:$LINENO: checking if compiler accepts -arch x86_64 flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if compiler accepts -arch x86_64 flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cc_arch_x86_64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch x86_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cc_arch_x86_64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cc_arch_x86_64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS=$hold_cflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cc_arch_x86_64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cc_arch_x86_64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test $tcl_cv_cc_arch_x86_64 = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch x86_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   { echo "$as_me:$LINENO: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Check for combined 32-bit and 64-bit fat build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fat_32_64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking if ld accepts -single_module flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if ld accepts -single_module flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_ld_single_module+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_ld_single_module=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_ld_single_module=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_ld_single_module" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_ld_single_module" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $tcl_cv_ld_single_module = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: link shlib with current and compatibility version flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dylib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Don't use -prebind when building for Mac OS X 10.4 or later only:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -prebind"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -headerpad_max_install_names"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking if ld accepts -search_paths_first flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking if ld accepts -search_paths_first flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_ld_search_paths_first+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_ld_search_paths_first=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_ld_search_paths_first=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_ld_search_paths_first" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_ld_search_paths_first" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $tcl_cv_ld_search_paths_first = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_cv_cc_visibility_hidden" != yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define MODULE_SCOPE __private_extern__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_cc_visibility_hidden=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: for combined 32 & 64 bit fat builds of Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # extensions, verify that 64-bit build is possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "${TEA_WINDOWINGSYSTEM}" = x11; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               echo "$as_me:$LINENO: checking for 64-bit X11" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for 64-bit X11... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_lib_x11_64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <X11/Xlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-XrmInitialize();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_lib_x11_64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_lib_x11_64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval $v'="$hold_'$v'"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_lib_x11_64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_lib_x11_64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "${TEA_WINDOWINGSYSTEM}" = aqua; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               echo "$as_me:$LINENO: checking for 64-bit Tk" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for 64-bit Tk... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_lib_tk_64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <tk.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tk_InitStubs(NULL, "", 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_lib_tk_64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_lib_tk_64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval $v'="$hold_'$v'"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_lib_tk_64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_lib_tk_64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # remove 64-bit arch flags from CFLAGS et al. if configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # does not support 64-bit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               { echo "$as_me:$LINENO: Removing 64-bit architectures from compiler & linker flags" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OS/390-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE=""                # Optimizer is buggy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _OE_SOCKETS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OSF1-V*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Digital OSF/1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$SHARED_BUILD" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='ld -shared -expect_unresolved "*"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='ld -non_shared -expect_unresolved "*"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $doRpath = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CFLAGS="$CFLAGS -mieee"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # see pthread_intro(3) for pthread support on osf1, k.furukawa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-lpthreads//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LIBS="$LIBS -lpthread -lmach -lexc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS="$LDFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   QNX-6*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # QNX RTP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This may work for all QNX, but it was only reported for v6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -Bshareable -x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SCO_SV-3.2*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="-fPIC -melf"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="-Kpic -belf"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -G"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SunOS-5.[0-6])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Careful to not let 5.10+ fall into this case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Note: If _REENTRANT isn't defined, then Solaris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # won't define thread-safe library routines.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _REENTRANT 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _POSIX_PTHREAD_SEMANTICS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SunOS-5*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Note: If _REENTRANT isn't defined, then Solaris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # won't define thread-safe library routines.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _REENTRANT 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _POSIX_PTHREAD_SEMANTICS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           arch=`isainfo`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$arch" = "sparcv9 sparc"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       { echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -m64 -mcpu=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "$do64bitVIS" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -xarch=v9a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS_ARCH="-xarch=v9a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -xarch=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS_ARCH="-xarch=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Solaris 64 uses this as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$arch" = "amd64 i386"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -m64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           { echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC on $system" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -m64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -xarch=amd64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -xarch=amd64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { echo "$as_me:$LINENO: WARNING: 64bit mode not supported for $arch" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$do64bit_ok" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "$arch" = "sparcv9 sparc"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # We need to specify -static-libgcc or we need to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # add the path to the sparv9 libgcc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # JH: static-libgcc is necessary for core Tcl, but may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # not be necessary for extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # for finding sparcv9 libgcc, get the regular libgcc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # path, remove so name and append 'sparcv9'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$arch" = "amd64 i386"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # JH: static-libgcc is necessary for core Tcl, but may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # not be necessary for extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SunOS-5.[1-9][0-9]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   UNIX_SV* | UnixWare-5*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -G'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # that don't grok the -Bexport option.  Test that it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: checking for ld accepts -Bexport flag" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for ld accepts -Bexport flag... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_ld_Bexport+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_ld_Bexport=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_ld_Bexport=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_ld_Bexport" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_ld_Bexport" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test $tcl_cv_ld_Bexport = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$do64bit" = yes -a "$do64bit_ok" = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { echo "$as_me:$LINENO: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Add in the arch flags late to ensure it wasn't removed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Not necessary in TEA, but this is aligned with core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If we're running gcc, then change the C flags for compiling shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # libraries to the right flags for gcc, instead of those for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # standard manufacturer compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$GCC" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AIX-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       BSD/OS*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGWIN_*|MINGW32_*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       IRIX*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Darwin-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SCO_SV-3.2*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       windows) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *) SHLIB_CFLAGS="-fPIC" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_cv_cc_visibility_hidden" != yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define MODULE_SCOPE extern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$SHARED_LIB_SUFFIX" = ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$UNSHARED_LIB_SUFFIX" = ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for SEH support in compiler" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for SEH support in compiler... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_seh+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "$cross_compiling" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_seh=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       int main(int argc, char** argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int a, b = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           __try {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               a = 666 / b;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           __except (EXCEPTION_EXECUTE_HANDLER) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_seh=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: program exited with status $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-( exit $ac_status )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_seh=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_seh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_seh" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_seh" = "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_NO_SEH 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check to see if the excpt.h include file provided contains the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # definition for EXCEPTION_DISPOSITION; if not, which is the case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # with Cygwin's version as of 2002-04-10, define it to be int,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # sufficient for getting the current code to work.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for EXCEPTION_DISPOSITION support in include files" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for EXCEPTION_DISPOSITION support in include files... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_eh_disposition+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXCEPTION_DISPOSITION x;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_eh_disposition=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_eh_disposition=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_eh_disposition" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_eh_disposition" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_eh_disposition" = "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define EXCEPTION_DISPOSITION int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check to see if winnt.h defines CHAR, SHORT, and LONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # even if VOID has already been #defined. The win32api
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # used by mingw and cygwin is known to do this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for winnt.h that ignores VOID define" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for winnt.h that ignores VOID define... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_winnt_ignore_void+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define VOID void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CHAR c;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHORT s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LONG l;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_winnt_ignore_void=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_winnt_ignore_void=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_winnt_ignore_void" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_winnt_ignore_void" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_WINNT_IGNORE_VOID 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if the compiler supports casting to a union type.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This is used to stop gcc from printing a compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # warning when initializing a union member.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for cast to union support" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for cast to union support... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_cast_to_union+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             union foo { int i; double d; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             union foo f = (union foo) (int) 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_cast_to_union=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_cast_to_union=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_cast_to_union" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_cast_to_union" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_cast_to_union" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_CAST_TO_UNION 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # These must be called after we do the basic CFLAGS checks and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # verify any possible 64-bit or similar switches are necessary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for required early compiler flags" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for required early compiler flags... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tcl_flags=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_flag__isoc99_source+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p = (char *)strtoll; char *q = (char *)strtoull;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__isoc99_source=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _ISOC99_SOURCE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p = (char *)strtoll; char *q = (char *)strtoull;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__isoc99_source=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_flag__isoc99_source=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _ISOC99_SOURCE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_flags="$tcl_flags _ISOC99_SOURCE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_flag__largefile64_source+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct stat64 buf; int i = stat64("/", &buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__largefile64_source=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _LARGEFILE64_SOURCE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct stat64 buf; int i = stat64("/", &buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__largefile64_source=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_flag__largefile64_source=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _LARGEFILE64_SOURCE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_flags="$tcl_flags _LARGEFILE64_SOURCE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_flag__largefile_source64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p = (char *)open64;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__largefile_source64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _LARGEFILE_SOURCE64 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p = (char *)open64;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_flag__largefile_source64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_flag__largefile_source64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _LARGEFILE_SOURCE64 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_flags="$tcl_flags _LARGEFILE_SOURCE64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${tcl_flags}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: none" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}none" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: ${tcl_flags}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}${tcl_flags}" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for 64-bit integer type" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for 64-bit integer type... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_type_64bit+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_cv_type_64bit=none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if the compiler knows natively about __int64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-__int64 value = (__int64) 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_type_64bit=__int64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_type_64bit="long long"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if we should use long anyway  Note that we substitute in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # type that is our current guess for a 64-bit type inside this check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # program, so it should be modified only carefully...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-switch (0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_type_64bit=${tcl_type_64bit}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_type_64bit}" = none ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_WIDE_INT_IS_LONG 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: using long" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}using long" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "${tcl_cv_type_64bit}" = "__int64" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -a "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific: We actually want to use the default tcl.h checks in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: using Tcl header defaults" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}using Tcl header defaults" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: ${tcl_cv_type_64bit}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}${tcl_cv_type_64bit}" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Now check for auxiliary declarations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for struct dirent64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for struct dirent64... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_struct_dirent64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dirent.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct dirent64 p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_struct_dirent64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_struct_dirent64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_struct_dirent64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_struct_dirent64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_STRUCT_DIRENT64 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for struct stat64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for struct stat64... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${tcl_cv_struct_stat64+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct stat64 p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_struct_stat64=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_struct_stat64=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: $tcl_cv_struct_stat64" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}$tcl_cv_struct_stat64" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_STRUCT_STAT64 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_func in open64 lseek64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: checking for $ac_func" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if eval "test \"\${$as_ac_var+set}\" = set"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define $ac_func innocuous_$ac_func
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* System header to define __stub macros and hopefully few prototypes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    which can conflict with char $ac_func (); below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    <limits.h> exists even on freestanding compilers.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __STDC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef $ac_func
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Override any gcc2 internal prototype to avoid an error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* We use char because int might match the return type of a gcc2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   builtin and then its argument prototype would still apply.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char $ac_func ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* The GNU C library defines this for functions which it implements
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    to always fail with ENOSYS.  Some functions are actually named
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    something starting with __ and the normal name is an alias.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-choke me
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char (*f) () = $ac_func;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return f != $ac_func;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext conftest$ac_exeext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_link) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest$ac_exeext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  eval "$as_ac_var=yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-eval "$as_ac_var=no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      conftest$ac_exeext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test `eval echo '${'$as_ac_var'}'` = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: checking for off64_t" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for off64_t... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${tcl_cv_type_off64_t+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo $ECHO_N "(cached) $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-off64_t offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.$ac_objext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_compile) 2>conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  grep -v '^ *+' conftest.er1 >conftest.err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conftest.er1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat conftest.err >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -z "$ac_c_werror_flag"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || test ! -s conftest.err'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { ac_try='test -s conftest.$ac_objext'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (eval $ac_try) 2>&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (exit $ac_status); }; }; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_cv_type_off64_t=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "$as_me: failed program was:" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sed 's/^/| /' conftest.$ac_ext >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl_cv_type_off64_t=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "x${tcl_cv_type_off64_t}" = "xyes" && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           test "x${ac_cv_func_lseek64}" = "xyes" && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           test "x${ac_cv_func_open64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define HAVE_TYPE_OFF64_T 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: yes" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}yes" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Set the default compiler switches based on the --enable-symbols option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for build with symbols" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for build with symbols... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check whether --enable-symbols or --disable-symbols was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${enable_symbols+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  enableval="$enable_symbols"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tcl_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DBGX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$as_me:$LINENO: result: no" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}no" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: yes (standard debugging)" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}yes (standard debugging)" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" != "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_MEM_DEBUG 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_ok" = "all"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: enabled symbols mem debugging" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}enabled symbols mem debugging" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$as_me:$LINENO: result: enabled $tcl_ok debugging" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}enabled $tcl_ok debugging" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Everyone should be linking against the Tcl stub library.  If you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# can't for some reason, remove this definition.  If you aren't using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# stubs, you also need to modify the SHLIB_LD_LIBS setting below to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# link against the non-stubbed Tcl library.  Add Tk too if necessary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define USE_TCL_STUBS 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Enable compile-time support for TIP #143 and TIP #285.  When using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# a pre-Tcl 8.5 or 8.6 core, respectively, the actual functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# will not be available at runtime.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_TIP143 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>confdefs.h <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_TIP285 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This macro generates a line to use when building a library.  It
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and TEA_LOAD_TCLCONFIG macros above.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cat >conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat confdefs.h >>conftest.$ac_ext
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>conftest.$ac_ext <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* end confdefs.h.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(_MSC_VER) && _MSC_VER >= 1400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-print("manifest needed")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $EGREP "manifest needed" >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Could do a CHECK_PROG for mt, but should always be with MSVC8+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CLEANFILES="$CLEANFILES *.manifest"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conftest*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\$@ \$(PKG_STUB_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_LIB="${MAKE_SHARED_LIB} "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_LIB="${MAKE_STATIC_LIB} "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Shared libraries and static libraries have different names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Use the double eval to make sure any variables in the suffix is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # substituted. (@@@ Might not be necessary anymore)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We force the unresolved linking of symbols that are really in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # the private libraries of Tcl and Tk.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${TK_BIN_DIR}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_LIB_FILE=lib${PKG_LIB_FILE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Some packages build their own stubs libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # These aren't needed on Windows (either MSVC or gcc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB_STUB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB_STUB="${RANLIB}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${TK_BIN_DIR}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       RANLIB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Some packages build their own stubs libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # These are escaped so that only CFLAGS is picked up at configure time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The other values will be substituted at make time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Determine the name of the tclsh and/or wish executables in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tcl and Tk build directories or the location they were installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# into. These paths are used to support running test cases only,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the Makefile should not be making use of these paths to generate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# a pkgIndex.tcl file or anything else at extension build time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: checking for tclsh" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo $ECHO_N "checking for tclsh... $ECHO_C" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tclConfig.sh is in Tcl build directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tclConfig.sh is in install location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test -f "$i/${TCLSH_PROG}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$as_me:$LINENO: result: ${TCLSH_PROG}" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "${ECHO_T}${TCLSH_PROG}" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PROG_WISH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Finally, substitute all of the various values into the Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You may alternatively have a special pkgIndex.tcl.in or other files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# which require substituting th AC variables in.  Include these here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ac_config_files="$ac_config_files Makefile pkgIndex.tcl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >confcache <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This file is a shell script that caches the results of configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tests run on this system so they can be shared between configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# scripts and configure runs, see configure's option --config-cache.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# It is not useful on other systems.  If it contains results you don't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# want to keep, you may remove or edit it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# config.status only pays attention to the cache file if you give it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the --recheck option to rerun configure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# `ac_cv_env_foo' variables (set or unset) will be overridden when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# loading this file, other *unset* `ac_cv_foo' will be assigned the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# following values.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The following way of writing the cache mishandles newlines in values,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# but we know of no workaround that is simple, portable, and efficient.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# So, don't put newlines in cache variables' values.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Ultrix sh set writes to stderr and can't be redirected directly,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and sets the high bit in the cache file unless we assign to the vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (set) 2>&1 |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *ac_space=\ *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # `set' does not quote correctly, so add quotes (double-quote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # substitution turns \\\\ into \\, and sed turns \\ into \).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed -n \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "s/'/'\\\\''/g;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # `set' quotes correctly as required by POSIX, so do not add quotes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed -n \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     t clear
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     : clear
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     t end
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     : end' >>confcache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if diff $cache_file confcache >/dev/null 2>&1; then :; else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -w $cache_file; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat confcache >$cache_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "not updating unwritable cache $cache_file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f confcache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test "x$prefix" = xNONE && prefix=$ac_default_prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Let make expand exec_prefix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# VPATH may cause trouble with some makes, so we remove $(srcdir),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# trailing colons and then remove the whole line if VPATH becomes empty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# (actually we leave an empty line to preserve line numbers).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "x$srcdir" = x.; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_vpsub='/^[     ]*VPATH[        ]*=/{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/:*\$(srcdir):*/:/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/:*\${srcdir}:*/:/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/:*@srcdir@:*/:/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/^\([^=]*=[        ]*\):*/\1/;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/:*$//;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s/^[^=]*=[  ]*$//;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Transform confdefs.h into DEFS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Protect against shell expansion while executing Makefile rules.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Protect against Makefile macro expansion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If the first sed substitution is executed (which looks for macros that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# take arguments), then we branch to the quote section.  Otherwise,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# look for a macro that doesn't take arguments.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >confdef2opt.sed <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-t clear
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-: clear
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,^[        ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\),-D\1=\2,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-t quote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,^[        ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\),-D\1=\2,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-t quote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-: quote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,[         `~#$^&*(){}\\|;'"<>?],\\&,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,\[,\\&,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,\],\\&,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,\$,$$,g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-p
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We use echo to avoid assuming a particular line-breaking character.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The extra dot is to prevent the shell from consuming trailing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# line-breaks from the sub-command output.  A line-break within
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# single-quotes doesn't work because, if this script is created in a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# platform that uses two characters for line-breaks (e.g., DOS), tr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# would break.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_LF_and_DOT=`echo; echo .`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f confdef2opt.sed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_libobjs=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_ltlibobjs=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # 1. Remove the extension, and $U if already installed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_i=`echo "$ac_i" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # 2. Add them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBOBJS=$ac_libobjs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LTLIBOBJS=$ac_ltlibobjs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-: ${CONFIG_STATUS=./config.status}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files_save=$ac_clean_files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: creating $CONFIG_STATUS" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >$CONFIG_STATUS <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#! $SHELL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Generated by $as_me.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Run this file to recreate the current configuration.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Compiler output produced by configure, useful for debugging
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure, is in config.log if it exists.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-debug=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cs_recheck=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cs_silent=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SHELL=\${CONFIG_SHELL-$SHELL}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## M4sh Initialization.  ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## --------------------- ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Be Bourne compatible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  emulate sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  NULLCMD=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # is contrary to our usage.  Disable this feature.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  alias -g '${1+"$@"}'='"$@"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  set -o posix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DUALCASE=1; export DUALCASE # for MKS sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Support unset when possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_unset=unset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_unset=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Work around bugs in pre-3.0 UWIN ksh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset ENV MAIL MAILPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS1='$ '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS2='> '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PS4='+ '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# NLS nuisances.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_var in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  LC_TELEPHONE LC_TIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval $as_var=C; export $as_var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $as_unset $as_var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Required to use basename.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if expr a : '\(a\)' >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=expr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_basename=basename
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_basename=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Name of the executable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_me=`$as_basename "$0" ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$0" : 'X\(/\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    .     : '\(.\)' 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo X/"$0" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\/\(\/\/\)$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\/\(\/\).*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/.*/./; q'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PATH needs CR, and LINENO needs CR and PATH.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Avoid depending upon Character Ranges.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_digits='0123456789'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_cr_alnum=$as_cr_Letters$as_cr_digits
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The user is always right.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${PATH_SEPARATOR+set}" != set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "#! /bin/sh" >conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo  "exit 0"   >>conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  chmod +x conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PATH_SEPARATOR=';'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PATH_SEPARATOR=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f conf$$.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_1=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_2=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_1" != "x$as_lineno_2" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Find who we are.  Look in the path if we contain no path at all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # relative or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $0 in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *[\\/]* ) as_myself=$0 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in $PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We did not find ourselves, most probably we were run as `sh COMMAND'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # in which case we are not to be found in the path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test "x$as_myself" = x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_myself=$0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test ! -f "$as_myself"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $CONFIG_SHELL in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  '')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  IFS=$as_save_IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -z "$as_dir" && as_dir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for as_base in sh bash ksh sh5; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $as_dir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if ("$as_dir/$as_base" -c '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_1=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_2=$LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_1" != "x$as_lineno_2" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        CONFIG_SHELL=$as_dir/$as_base
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        export CONFIG_SHELL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        exec "$CONFIG_SHELL" "$0" ${1+"$@"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # uniformly replaced by the line number.  The first 'sed' inserts a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # line-number line before each line; the second 'sed' does the real
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # work.  The second script uses 'N' to pair each line-number line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # with the numbered line, and appends trailing '-' during
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # substitution so that $LINENO is not a special case at line end.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed '=' <$as_myself |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      N
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,$,-,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      : loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      t loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,-$,,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      s,^['$as_cr_digits']*\n,,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ' >$as_me.lineno &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  chmod +x $as_me.lineno ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Don't try to exec as it changes $[0], causing all sort of problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # (the dirname of $[0] is not the place where we might find the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # original and so on.  Autoconf is especially sensible to this).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  . ./$as_me.lineno
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Exit status is that of the last command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *c*,-n*) ECHO_N= ECHO_C='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-' ECHO_T=' ' ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if expr a : '\(a\)' >/dev/null 2>&1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=expr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_expr=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conf$$ conf$$.exe conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo >conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if ln -s conf$$.file conf$$ 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # We could just check for DJGPP; but this test a) works b) is more generic
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -f conf$$.exe; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't use ln at all; we don't have any links
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_ln_s='cp -p'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_ln_s='ln -s'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-elif ln conf$$.file conf$$ 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_ln_s=ln
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_ln_s='cp -p'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f conf$$ conf$$.exe conf$$.file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if mkdir -p . 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_mkdir_p=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -d ./-p && rmdir ./-p
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  as_mkdir_p=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_executable_p="test -f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sed expression to map a string onto a valid CPP name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sed expression to map a string onto a valid variable name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We need space, tab and new line, in precisely that order.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as_nl='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IFS="         $as_nl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# CDPATH.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_unset CDPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec 6>&1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Open the log real soon, to keep \$[0] and so on meaningful, and to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# report actual input values of CONFIG_FILES etc. instead of their
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# values after options handling.  Logging --version etc. is OK.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exec 5>>config.log
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Running $as_me. ##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ASBOX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >&5 <<_CSEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This file was extended by thread $as_me 2.7.3, which was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-generated by GNU Autoconf 2.59.  Invocation command line was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CONFIG_FILES    = $CONFIG_FILES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CONFIG_HEADERS  = $CONFIG_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CONFIG_LINKS    = $CONFIG_LINKS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CONFIG_COMMANDS = $CONFIG_COMMANDS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $ $0 $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_CSEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Files that config.status was made for.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_config_files"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_config_headers"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_config_links"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "$ac_config_commands"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cs_usage="\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\`$as_me' instantiates files from templates according to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-current configuration.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Usage: $0 [OPTIONS] [FILE]...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -h, --help       print this help, then exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -V, --version    print version number, then exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -q, --quiet      do not print progress messages
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -d, --debug      don't remove temporary files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      --recheck    update $as_me by reconfiguring in the same conditions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --file=FILE[:TEMPLATE]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              instantiate the configuration file FILE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Configuration files:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$config_files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Report bugs to <bug-autoconf@gnu.org>."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_cs_version="\\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread config.status 2.7.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configured by $0, generated by GNU Autoconf 2.59,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Copyright (C) 2003 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This config.status script is free software; the Free Software Foundation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gives unlimited permission to copy, distribute and modify it."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-srcdir=$srcdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If no file are specified by the user, then we need to provide default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# value.  By we need to know if files were specified by the user.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_need_defaults=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-while test $# != 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $1 in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --*=*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_shift=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_option=$1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_optarg=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_shift=shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) # This is not an option, so the user has probably given explicit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # arguments.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ac_option=$1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ac_need_defaults=false;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_option in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Handling of the options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cs_recheck=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --version | --vers* | -V )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$ac_cs_version"; exit 0 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --he | --h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Conflict between --help and --header
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Try \`$0 --help' for more information." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: ambiguous option: $1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Try \`$0 --help' for more information." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; };;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --help | --hel | -h )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$ac_cs_usage"; exit 0 ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --debug | --d* | -d )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    debug=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --file | --fil | --fi | --f )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $ac_shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_need_defaults=false;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  --header | --heade | --head | --hea )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $ac_shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_need_defaults=false;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_cs_silent=: ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # This is an error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Try \`$0 --help' for more information." >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: unrecognized option: $1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Try \`$0 --help' for more information." >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; } ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_config_targets="$ac_config_targets $1" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_configure_extra_args=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_cs_silent; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exec 6>/dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_configure_extra_args="$ac_configure_extra_args --silent"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if \$ac_cs_recheck; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_config_target in $ac_config_targets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case "$ac_config_target" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Handling of arguments.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  "pkgIndex.tcl" ) CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; };;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If the user did not use the arguments to specify the items to instantiate,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# then the envvar interface is used.  Set only those that are not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We use the long form for the default assignment because of an extremely
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# bizarre bug on SunOS 4.1.3.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if $ac_need_defaults; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Have a temporary directory for convenience.  Make it in the build tree
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# simply because there is no reason to put it here, and in addition,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# creating and moving files from /tmp can sometimes cause problems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Create a temporary directory, and hook for its removal unless debugging.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$debug ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap '{ (exit 1); exit 1; }' 1 2 13 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Create a (secure) tmp directory for tmp files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test -n "$tmp" && test -d "$tmp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}  ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  tmp=./confstat$$-$RANDOM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (umask 077 && mkdir $tmp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$me: cannot create a temporary directory in ." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# CONFIG_FILES section.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# No need to generate the scripts if there are no CONFIG_FILES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This happens for instance when ./config.status config.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -n "\$CONFIG_FILES"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Protect against being on the right side of a sed subst in config.status.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SHELL@,$SHELL,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@exec_prefix@,$exec_prefix,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@prefix@,$prefix,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@program_transform_name@,$program_transform_name,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@bindir@,$bindir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@sbindir@,$sbindir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@libexecdir@,$libexecdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@datadir@,$datadir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@sysconfdir@,$sysconfdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@sharedstatedir@,$sharedstatedir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@localstatedir@,$localstatedir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@libdir@,$libdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@includedir@,$includedir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@oldincludedir@,$oldincludedir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@infodir@,$infodir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@mandir@,$mandir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@build_alias@,$build_alias,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@host_alias@,$host_alias,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@target_alias@,$target_alias,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@DEFS@,$DEFS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ECHO_C@,$ECHO_C,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ECHO_N@,$ECHO_N,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ECHO_T@,$ECHO_T,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LIBS@,$LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CYGPATH@,$CYGPATH,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@EXEEXT@,$EXEEXT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_LIB_FILE@,$PKG_LIB_FILE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_STUB_LIB_FILE@,$PKG_STUB_LIB_FILE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_STUB_SOURCES@,$PKG_STUB_SOURCES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_STUB_OBJECTS@,$PKG_STUB_OBJECTS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_TCL_SOURCES@,$PKG_TCL_SOURCES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_HEADERS@,$PKG_HEADERS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_INCLUDES@,$PKG_INCLUDES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_LIBS@,$PKG_LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_CFLAGS@,$PKG_CFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_VERSION@,$TCL_VERSION,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_PATCH_LEVEL@,$TCL_PATCH_LEVEL,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_BIN_DIR@,$TCL_BIN_DIR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_SRC_DIR@,$TCL_SRC_DIR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_LIB_FILE@,$TCL_LIB_FILE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_LIB_FLAG@,$TCL_LIB_FLAG,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_LIB_SPEC@,$TCL_LIB_SPEC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_STUB_LIB_FILE@,$TCL_STUB_LIB_FILE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_STUB_LIB_FLAG@,$TCL_STUB_LIB_FLAG,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_STUB_LIB_SPEC@,$TCL_STUB_LIB_SPEC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CC@,$CC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CFLAGS@,$CFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LDFLAGS@,$LDFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CPPFLAGS@,$CPPFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ac_ct_CC@,$ac_ct_CC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@OBJEXT@,$OBJEXT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CLEANFILES@,$CLEANFILES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_LIBS@,$TCL_LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_DEFS@,$TCL_DEFS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_EXTRA_CFLAGS@,$TCL_EXTRA_CFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_LD_FLAGS@,$TCL_LD_FLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_SHLIB_LD_LIBS@,$TCL_SHLIB_LD_LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CPP@,$CPP,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL@,$INSTALL,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL_DATA_DIR@,$INSTALL_DATA_DIR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@INSTALL_LIBRARY@,$INSTALL_LIBRARY,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SET_MAKE@,$SET_MAKE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@RANLIB@,$RANLIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@EGREP@,$EGREP,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@MATH_LIBS@,$MATH_LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_SOURCES@,$PKG_SOURCES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@PKG_OBJECTS@,$PKG_OBJECTS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_INCLUDES@,$TCL_INCLUDES,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_THREADS@,$TCL_THREADS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SHARED_BUILD@,$SHARED_BUILD,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@AR@,$AR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ac_ct_AR@,$ac_ct_AR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CELIB_DIR@,$CELIB_DIR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@RC@,$RC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@ac_ct_RC@,$ac_ct_RC,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CFLAGS_DEBUG@,$CFLAGS_DEBUG,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CFLAGS_OPTIMIZE@,$CFLAGS_OPTIMIZE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CFLAGS_WARNING@,$CFLAGS_WARNING,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@STLIB_LD@,$STLIB_LD,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SHLIB_LD@,$SHLIB_LD,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SHLIB_LD_LIBS@,$SHLIB_LD_LIBS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@SHLIB_CFLAGS@,$SHLIB_CFLAGS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LD_LIBRARY_PATH_VAR@,$LD_LIBRARY_PATH_VAR,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@CFLAGS_DEFAULT@,$CFLAGS_DEFAULT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LDFLAGS_DEFAULT@,$LDFLAGS_DEFAULT,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCL_DBGX@,$TCL_DBGX,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@MAKE_LIB@,$MAKE_LIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@MAKE_SHARED_LIB@,$MAKE_SHARED_LIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@MAKE_STATIC_LIB@,$MAKE_STATIC_LIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@MAKE_STUB_LIB@,$MAKE_STUB_LIB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@RANLIB_STUB@,$RANLIB_STUB,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@VC_MANIFEST_EMBED_DLL@,$VC_MANIFEST_EMBED_DLL,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@VC_MANIFEST_EMBED_EXE@,$VC_MANIFEST_EMBED_EXE,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@TCLSH_PROG@,$TCLSH_PROG,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LIBOBJS@,$LIBOBJS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Split the substitutions into bite-sized pieces for seds with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # small command number limits, like on Digital OSF/1 and HP-UX.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_max_sed_lines=48
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_sed_frag=1 # Number of current file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_beg=1 # First line for current file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_end=$ac_max_sed_lines # Line after last line for current file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_more_lines=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_sed_cmds=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  while $ac_more_lines; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $ac_beg -gt 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test ! -s $tmp/subs.frag; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_more_lines=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # The purpose of the label and of the branching condition is to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # speed up the sed processing (if there are no `@' at all, there
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # is no need to browse any of the substitutions).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # These are the two extra sed commands mentioned above.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      (echo ':t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test -z "$ac_sed_cmds"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_sed_frag=`expr $ac_sed_frag + 1`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_beg=$ac_end
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ac_end=`expr $ac_end + $ac_max_sed_lines`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -z "$ac_sed_cmds"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_sed_cmds=cat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi # test -n "$CONFIG_FILES"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_file in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  - | *:- | *:-:* ) # input from stdin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cat >$tmp/stdin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  * )   ac_file_in=$ac_file.in ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$ac_file" : 'X\(//\)[^/]' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$ac_file" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$ac_file" : 'X\(/\)' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    .     : '\(.\)' 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo X"$ac_file" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)[^/].*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\).*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/.*/./; q'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  { if $as_mkdir_p; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mkdir -p "$ac_dir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_dir="$ac_dir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    as_dirs=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while test ! -d "$as_dir"; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      as_dirs="$as_dir $as_dirs"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$as_dir" : 'X\(//\)[^/]' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$as_dir" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    X"$as_dir" : 'X\(/\)' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    .     : '\(.\)' 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo X"$as_dir" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)[^/].*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\/\)$/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /^X\(\/\).*/{ s//\1/; q; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     s/.*/./; q'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test ! -n "$as_dirs" || mkdir $as_dirs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_builddir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$ac_dir" != .; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # A "../" for each directory in $ac_dir_suffix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_dir_suffix= ac_top_builddir=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .)  # No --srcdir option.  We are building in place.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -z "$ac_top_builddir"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_top_srcdir=.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* )  # Absolute path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=$srcdir$ac_dir_suffix;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_top_srcdir=$srcdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) # Relative path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Do not use `cd foo && pwd` to compute absolute paths, because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the directories may not exist.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case `pwd` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_builddir="$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case "$ac_dir" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_builddir=`pwd`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_top_builddir=${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case ${ac_top_builddir}. in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_top_builddir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_srcdir=$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_srcdir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case $ac_abs_builddir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.) ac_abs_top_srcdir=$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $ac_top_srcdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test x"$ac_file" != x-; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { echo "$as_me:$LINENO: creating $ac_file" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: creating $ac_file" >&6;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rm -f "$ac_file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Let's still pretend it is `configure' which instantiates (i.e., don't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # use $as_me), people would be surprised to read:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  #    /* config.h.  Generated by config.status.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test x"$ac_file" = x-; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure_input=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure_input="$ac_file.  "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  configure_input=$configure_input"Generated from `echo $ac_file_in |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                sed 's,.*/,,'` by configure."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # First look for the input files in the build tree, otherwise in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # src tree.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_file_inputs=`IFS=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for f in $ac_file_in; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      case $f in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      -) echo $tmp/stdin ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      [\\/$]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Absolute (can't be DOS-style, as IFS=:)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot find input file: $f" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$f";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      *) # Relative
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "$f"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Build tree
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test -f "$srcdir/$f"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Source tree
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$srcdir/$f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # /dev/null tree
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "$as_me: error: cannot find input file: $f" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   { (exit 1); exit 1; }; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done` || { (exit 1); exit 1; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  sed "$ac_vpsub
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$extrasub
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-:t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@configure_input@,$configure_input,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@srcdir@,$ac_srcdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@abs_srcdir@,$ac_abs_srcdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@top_srcdir@,$ac_top_srcdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@builddir@,$ac_builddir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@abs_builddir@,$ac_abs_builddir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@top_builddir@,$ac_top_builddir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  rm -f $tmp/stdin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test x"$ac_file" != x-; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mv $tmp/out $ac_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cat $tmp/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rm -f $tmp/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cat >>$CONFIG_STATUS <<\_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{ (exit 0); exit 0; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_ACEOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chmod +x $CONFIG_STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ac_clean_files=$ac_clean_files_save
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure is writing to config.log, and then calls config.status.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# config.status does its own redirection, appending to config.log.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Unfortunately, on DOS this fails, as config.log is still kept open
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# by configure, so config.status won't be able to write to it; its
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# output is simply discarded.  So we exec the FD to /dev/null,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# effectively closing config.log, so it can be properly (re)opened and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# appended to by config.status.  When coming back to configure, we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# need to make the FD available again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "$no_create" != yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_cs_success=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ac_config_status_args=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "$silent" = yes &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ac_config_status_args="$ac_config_status_args --quiet"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exec 5>/dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exec 5>>config.log
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # would make configure fail if this is the last instruction.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  $ac_cs_success || { (exit 1); exit 1; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/configure.ac b/vendor/thread2.7.3/configure.ac
</span>deleted file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index ebb3d04e1..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/configure.ac
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,221 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/bin/bash -norc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl        This file is an input file used by the GNU "autoconf" program to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl        generate the file "configure", which is run during Tcl installation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl        to configure the system for the local environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sample configure.ac for Tcl Extensions.  The only places you should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# need to modify this file are marked by the string __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Set your package name and version numbers here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# set as provided.  These will also be added as -D defs in your Makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# so you can encode the package version directly into the source files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_INIT([thread], [2.7.3])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Call TEA_INIT as the first TEA_ macro to set up initial vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This will define a ${TEA_PLATFORM} variable == "unix" or "windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_INIT([3.9])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_CONFIG_AUX_DIR(tclconfig)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Load the tclConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_PATH_TCLCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_LOAD_TCLCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TCL_MAJOR_VERSION}" -ne 8 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_ERROR([${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TCL_MINOR_VERSION}" -lt 4 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_ERROR([${PACKAGE_NAME} ${PACKAGE_VERSION} requires Tcl 8.4+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Found config for Tcl ${TCL_VERSION}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Load the tkConfig.sh file if necessary (Tk extension)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PATH_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_LOAD_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Handle the --prefix=... option by defaulting to what Tcl gave.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_PREFIX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Standard compiler checks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This sets up CC by using the CC env var, or looks for gcc otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This also calls AC_PROG_CC and a few others to create the basic setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# necessary to compile executables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check if building with optional Gdbm package. This will declare
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# GDBM_CFLAGS and GDBM_LIBS variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLTHREAD_WITH_GDBM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Locate the NaviServer/AOLserver dir for compilation as NaviServer/AOLserver module.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This will declare NS_INCLUDES, NS_LIBS and define NS_AOLSERVER.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NS_PATH_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Specify the C source files to compile in TEA_ADD_SOURCES,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# public headers that need to be installed in TEA_ADD_HEADERS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# stub library C source files to compile in TEA_ADD_STUB_SOURCES,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and runtime Tcl library files in TEA_ADD_TCL_SOURCES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and PKG_TCL_SOURCES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_SOURCES([generic/threadNs.c           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadCmd.c          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvCmd.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSpCmd.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadPoolCmd.c      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/psGdbm.c             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvListCmd.c    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/threadSvKeylistCmd.c \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 generic/tclXkeylist.c        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_HEADERS([generic/tclThread.h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_INCLUDES([${NS_INCLUDES}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_LIBS([${GDBM_LIBS} ${NS_LIBS}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_CFLAGS([${GDBM_CFLAGS}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_STUB_SOURCES([])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ADD_TCL_SOURCES([lib/ttrace.tcl])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# A few miscellaneous platform-specific items:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Define a special symbol for Windows (BUILD_sample in this case) so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# that we create the export library with the dll.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Windows creates a few extra files that need to be cleaned up.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You can add more files to clean if your extension creates any extra
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_* any platform specific compiler/build info here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_ADD_SOURCES([win/threadWin.c])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_ADD_SOURCES([unix/threadUnix.c])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# __CHANGE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Choose which headers you need.  Extension authors should try very
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# hard to only rely on the Tcl public header files.  Internal headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# contain private data structures and are subject to change without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# notice.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_PUBLIC_TCL_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PRIVATE_TCL_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PUBLIC_TK_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PRIVATE_TK_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PATH_X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check whether --enable-threads or --disable-threads was given.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This auto-enables if Tcl was compiled threaded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ENABLE_THREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The statement below defines a collection of symbols related to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# building as a shared library instead of a static library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ENABLE_SHARED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This macro figures out what flags to use with the compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# when building shared/static debug/optimized objects.  This information
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# can be taken from the tclConfig.sh file, but this figures it all out.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_CONFIG_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Set the default compiler switches based on the --enable-symbols option.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_ENABLE_SYMBOLS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Everyone should be linking against the Tcl stub library.  If you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# can't for some reason, remove this definition.  If you aren't using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# stubs, you also need to modify the SHLIB_LD_LIBS setting below to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# link against the non-stubbed Tcl library.  Add Tk too if necessary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Enable compile-time support for TIP #143 and TIP #285.  When using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# a pre-Tcl 8.5 or 8.6 core, respectively, the actual functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# will not be available at runtime.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFINE(TCL_TIP143, 1, [Enable TIP #143 support])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFINE(TCL_TIP285, 1, [Enable TIP #285 support])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This macro generates a line to use when building a library.  It
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and TEA_LOAD_TCLCONFIG macros above.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_MAKE_LIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Determine the name of the tclsh and/or wish executables in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tcl and Tk build directories or the location they were installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# into. These paths are used to support running test cases only,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the Makefile should not be making use of these paths to generate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# a pkgIndex.tcl file or anything else at extension build time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA_PROG_TCLSH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#TEA_PROG_WISH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Finally, substitute all of the various values into the Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You may alternatively have a special pkgIndex.tcl.in or other files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# which require substituting th AC variables in.  Include these here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_OUTPUT([Makefile pkgIndex.tcl])
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/format.tcl b/vendor/thread2.7.3/doc/format.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 394c46251..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/format.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,35 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/usr/local/bin/tclsh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set mydir [file dirname [info script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lappend auto_path /usr/local/lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package req doctools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doctools::new dt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wd [pwd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cd $mydir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-file rename html htm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set code [catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set f [open man.macros]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set m [read $f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach file [glob -nocomplain *.man] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set xx [file root $file]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set f [open $xx.man]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set t [read $f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        close $f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach {fmt ext dir} {nroff n man html html htm} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            dt configure -format $fmt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set o [dt format $t]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set f [open $dir/$xx.$ext w]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$fmt == "nroff"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set o [string map [list {.so man.macros} $m] $o]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $f $o
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            close $f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} err]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-file rename htm html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cd $wd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {$code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    error $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit 0
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/html/thread.html b/vendor/thread2.7.3/doc/html/thread.html
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 2ad13981b..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/html/thread.html
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,727 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<html><head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<title>thread - Tcl Threading </title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- Generated from file '' by tcllib/doctools with format 'html'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h1> thread(n) 2.7  &quot;Tcl Threading&quot;</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="name">NAME</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p> thread - Extension for script access to Tcl threading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="table_of_contents">TABLE OF CONTENTS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#commands">COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#keywords">KEYWORDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="synopsis">SYNOPSIS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Tcl 8.4</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Thread ?2.7?</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><table border=1 width=100% cellspacing=0 cellpadding=0><tr            bgcolor=lightyellow><td bgcolor=lightyellow><table 0 width=100% cellspacing=0 cellpadding=0><tr valign=top ><td ><a href="#1"><b class='cmd'>thread::create</b> ?-joinable? ?-preserved? ?script?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#2"><b class='cmd'>thread::preserve</b> ?id?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#3"><b class='cmd'>thread::release</b> ?-wait? ?id?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#4"><b class='cmd'>thread::id</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#5"><b class='cmd'>thread::errorproc</b> ?procname?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#6"><b class='cmd'>thread::unwind</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#7"><b class='cmd'>thread::exit</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#8"><b class='cmd'>thread::names</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#9"><b class='cmd'>thread::exists</b> <i class='arg'>id</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#10"><b class='cmd'>thread::send</b> ?-async? ?-head? <i class='arg'>id</i> <i class='arg'>script</i> ?varname?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#11"><b class='cmd'>thread::broadcast</b> <i class='arg'>id</i> <i class='arg'>script</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#12"><b class='cmd'>thread::wait</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#13"><b class='cmd'>thread::eval</b> ?-lock mutex? <i class='arg'>arg</i> ?arg ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#14"><b class='cmd'>thread::join</b> <i class='arg'>id</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#15"><b class='cmd'>thread::configure</b> <i class='arg'>id</i> ?option? ?value? ?...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#16"><b class='cmd'>thread::transfer</b> <i class='arg'>id</i> <i class='arg'>channel</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#17"><b class='cmd'>thread::detach</b> <i class='arg'>channel</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#18"><b class='cmd'>thread::attach</b> <i class='arg'>channel</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#19"><b class='cmd'>thread::mutex</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#20"><b class='cmd'>thread::mutex</b> <strong>create</strong> ?-recursive?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#21"><b class='cmd'>thread::mutex</b> <strong>destroy</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#22"><b class='cmd'>thread::mutex</b> <strong>lock</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#23"><b class='cmd'>thread::mutex</b> <strong>unlock</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#24"><b class='cmd'>thread::rwmutex</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#25"><b class='cmd'>thread::rwmutex</b> <strong>create</strong></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#26"><b class='cmd'>thread::rwmutex</b> <strong>destroy</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#27"><b class='cmd'>thread::rwmutex</b> <strong>rlock</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#28"><b class='cmd'>thread::rwmutex</b> <strong>wlock</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#29"><b class='cmd'>thread::rwmutex</b> <strong>unlock</strong> <i class='arg'>mutex</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#30"><b class='cmd'>thread::cond</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#31"><b class='cmd'>thread::cond</b> <strong>create</strong></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#32"><b class='cmd'>thread::cond</b> <strong>destroy</strong> <i class='arg'>cond</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#33"><b class='cmd'>thread::cond</b> <strong>notify</strong> <i class='arg'>cond</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#34"><b class='cmd'>thread::cond</b> <strong>wait</strong> <i class='arg'>cond</i> <i class='arg'>mutex</i> ?ms?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</table></td></tr></table>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="description">DESCRIPTION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <strong>thread</strong> extension creates threads that contain Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreters, and it lets you send scripts to those threads for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Additionaly, it provides script-level access to basic thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronization primitives, like mutexes and condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="commands">COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands for creating and destroying threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and sending scripts to threads for evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="1"><b class='cmd'>thread::create</b> ?-joinable? ?-preserved? ?script?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates a thread that contains a Tcl interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The Tcl interpreter either evaluates the optional <strong>script</strong>, if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, or it waits in the event loop for scripts that arrive via
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the <b class='cmd'>thread::send</b> command. The result, if any, of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional <strong>script</strong> is never returned to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The result of <b class='cmd'>thread::create</b> is the ID of the thread. This is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the opaque handle which identifies the newly created thread for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all other package commands. The handle of the thread goes out of scope
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-automatically when thread is marked for exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(see the <b class='cmd'>thread::release</b> command below).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional <strong>script</strong> argument contains the <b class='cmd'>thread::wait</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command the thread will enter into the event loop. If such command is not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found  in the <strong>script</strong> the thread will run the <strong>script</strong> to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the end and exit. In that case, the handle may be safely ignored since it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-refers to a thread which does not exists any more at the time when the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command returns.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using flag <strong>-joinable</strong> it is possible to create a joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, i.e. one upon whose exit can be waited upon by using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::join</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Note that failure to join a thread created with <strong>-joinable</strong> flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-results in resource and memory leaks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threads created by the <b class='cmd'>thread::create</b> cannot be destroyed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-forcefully. Consequently, there is no corresponding thread destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. A thread may only be released using the <b class='cmd'>thread::release</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and if its internal reference count drops to zero, the thread is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for exit. This kicks the thread out of the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-servicing and the thread continues to execute commands passed in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the <strong>script</strong> argument, following the <b class='cmd'>thread::wait</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. If this was the last command in the script, as usualy the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case, the thread will exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It is possible to create a situation in which it may be impossible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to terminate the thread, for example by putting some endless loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the <b class='cmd'>thread::wait</b> or entering the event loop again by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doing an vwait-type of command. In such cases, the thread may never
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit. This is considered to be a bad practice and should be avoided
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if possible. This is best illustrated by the example below:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # You should never do ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        package require Http
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait forever ; # &lt;-- this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The thread created in the above example will never be able to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-After it has been released with the last matching <b class='cmd'>thread::release</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-call, the thread will jump out of the <b class='cmd'>thread::wait</b> and continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to execute commands following. It will enter <b class='cmd'>vwait</b> command and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-wait endlessly for events. There is no way one can terminate such thread,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so you wouldn't want to do this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each newly created has its internal reference counter set to 0 (zero),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. it is unreserved. This counter gets incremented by a call to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::preserve</b> and decremented by a call to <b class='cmd'>thread::release</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. These two commands implement simple but effective thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system and offer predictable and controllable thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-termination capabilities. It is however possible to create initialy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-preserved threads by using flag <strong>-preserved</strong> of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::create</b> command. Threads created with this flag have the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initial value of the reference counter of 1 (one), and are thus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initially marked reserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="2"><b class='cmd'>thread::preserve</b> ?id?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command increments the thread reference counter. Each call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command increments the reference counter by one (1).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the increment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread <strong>id</strong>, the command preserves
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise the current thread is preserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-With reference counting, one can implement controlled access to a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared Tcl thread. By incrementing the reference counter, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-caller signalizes that he/she wishes to use the thread for a longer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-period of time. By decrementing the counter, caller signalizes that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she has finished using the thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="3"><b class='cmd'>thread::release</b> ?-wait? ?id?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command decrements the thread reference counter. Each call to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this command decrements the reference counter by one (1).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread <strong>id</strong>, the command releases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise, the current thread is released.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the decrement.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the target thread is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for termination. You should not reference the thread after the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::release</b> command returns zero or negative integer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The handle of the thread goes out of scope and should not be used any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more. Any following reference to the same thread handle will result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional flag <strong>-wait</strong> instructs the caller thread to wait for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit, if the effect of the command would result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in termination of the target thread, i.e. if the return result would
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be zero (0). Without the flag, the caller thread does not wait for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit. Care must be taken when using the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<strong>-wait</strong>, since this may block the caller thread indefinitely.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This option has been implemented for some special uses of the extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and is deprecated for regular use. Regular users should create joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads by using the <strong>-joinable</strong> option of the <b class='cmd'>thread::create</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command and the <b class='cmd'>thread::join</b> to wait for thread to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="4"><b class='cmd'>thread::id</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns the ID of the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="5"><b class='cmd'>thread::errorproc</b> ?procname?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sets a handler for errors that occur in scripts sent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously, using the <strong>-async</strong> flag of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::send</b> command, to other threads. If no handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is specified, the current handler is returned. The empty string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resets the handler to default (unspecified) value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-An uncaught error in a thread causes an error message to be sent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the standard error channel. This default reporting scheme can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be changed by registering a procedure which is called to report
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the error. The <i class='arg'>procname</i> is called in the interpreter that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked the <b class='cmd'>thread::errorproc</b> command. The <i class='arg'>procname</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is called like this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    myerrorproc thread_id errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="6"><b class='cmd'>thread::unwind</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with <b class='cmd'>thread::preserve</b> and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::release</b> commands. Support for <b class='cmd'>thread::unwind</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command stops a prior <b class='cmd'>thread::wait</b> command. Execution of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the script passed to newly created thread will continue from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::wait</b> command. If <b class='cmd'>thread::wait</b> was the last command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the script, the thread will exit. The command returns empty result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-but may trigger Tcl error with the message &quot;target thread died&quot; in some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="7"><b class='cmd'>thread::exit</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with <b class='cmd'>thread::preserve</b> and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::release</b> commands. Support for <b class='cmd'>thread::exit</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command forces a thread stuck in the <b class='cmd'>thread::wait</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command to unconditionaly exit. The execution of <b class='cmd'>thread::exit</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command is guaranteed to leave the program memory in the unconsistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-state, produce memory leaks and otherwise affect other subsytem(s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the Tcl application in an unpredictable manner. The command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returns empty result but may trigger Tcl error with the message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&quot;target thread died&quot; in some situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="8"><b class='cmd'>thread::names</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of thread IDs. These are only for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads that have been created via <b class='cmd'>thread::create</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If your application creates other threads at the C level, they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are not reported by this command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="9"><b class='cmd'>thread::exists</b> <i class='arg'>id</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if thread given by the <i class='arg'>id</i> parameter exists,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-false (0) otherwise. This applies only for threads that have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-been created via <b class='cmd'>thread::create</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="10"><b class='cmd'>thread::send</b> ?-async? ?-head? <i class='arg'>id</i> <i class='arg'>script</i> ?varname?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a <i class='arg'>script</i> to another thread and, optionally,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waits for the result. If the <strong>-async</strong> flag is specified, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command does not wait for the result and it returns empty string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The target thread must enter it's event loop in order to receive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-scripts sent via this command. This is done by default for threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created without a startup script. Threads can enter the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-explicitly by calling <b class='cmd'>thread::wait</b> or any other relevant Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command, like <b class='cmd'>update</b>, <b class='cmd'>vwait</b>, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional <strong>varname</strong> specifies name of the variable to store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the result of the <i class='arg'>script</i>. Without the <strong>-async</strong> flag,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command returns the evaluation code, similarily to the standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl <b class='cmd'>catch</b> command. If, however, the <strong>-async</strong> flag is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, the command returns immediately and caller can later
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>vwait</b> on ?varname? to get the result of the passed <i class='arg'>script</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t2 [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t1 &quot;set a 1&quot; result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t2 &quot;set b 2&quot; result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for {set i 0} {$i &lt; 2} {incr i} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the above example, two threads were fed work and both of them were
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instructed to signalize the same variable &quot;result&quot; in the calling thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The caller entered the event loop twice to get both results. Note,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-however, that the order of the received results may vary, depending on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the current system load, type of work done, etc, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Many threads can simultaneously send scripts to the target thread for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-execution. All of them are entered into the event queue of the target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and executed on the FIFO basis, intermingled with optional other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events pending in the event queue of the target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using the optional ?-head? switch, scripts posted to the thread's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event queue can be placed on the head, instead on the tail of the queue,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thus being executed in the LIFO fashion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="11"><b class='cmd'>thread::broadcast</b> <i class='arg'>id</i> <i class='arg'>script</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a <i class='arg'>script</i> to all threads created by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package for execution. It does not wait for response from any of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="12"><b class='cmd'>thread::wait</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This enters the event loop so a thread can receive messages from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the <b class='cmd'>thread::send</b> command. This command should only be used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-within the script passed to the <b class='cmd'>thread::create</b>. It should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be the very last command in the script. If this is not the case,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the exiting thread will continue executing the script lines pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the <b class='cmd'>thread::wait</b> which is usually not what you want and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Do some initialization work here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait ; # Enter the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="13"><b class='cmd'>thread::eval</b> ?-lock mutex? <i class='arg'>arg</i> ?arg ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the mutex protection. If no mutex is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified by using the ?-lock mutex? optional argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the internal static mutex is used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="14"><b class='cmd'>thread::join</b> <i class='arg'>id</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for the thread with ID <i class='arg'>id</i> to exit and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-then returns it's exit code. Errors will be returned for threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-which are not joinable or already waited upon by another thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Upon the join the handle of the thread has gone out of scope and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should not be used any more.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="15"><b class='cmd'>thread::configure</b> <i class='arg'>id</i> ?option? ?value? ?...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command configures various low-level aspects of the thread with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ID <i class='arg'>id</i> in the similar way as the standard Tcl command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>fconfigure</b> configures some Tcl channel options. Options currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-supported are: <strong>-eventmark</strong> and <strong>-unwindonerror</strong>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <strong>-eventmark</strong> option, when set, limits the number of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously posted scripts to the thread event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <b class='cmd'>thread::send -async</b> command will block until the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of pending scripts in the event loop does not drop below the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configured with <strong>-eventmark</strong>. Default value for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<strong>-eventmark</strong> is 0 (zero) which effectively disables the checking,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. allows for unlimited number of posted scripts.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <strong>-unwindonerror</strong> option, when set, causes the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread to unwind if the result of the script processing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in error. Default value for the <strong>-unwindonerror</strong>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is 0 (false), i.e. thread continues to process scripts after one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the posted scripts fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="16"><b class='cmd'>thread::transfer</b> <i class='arg'>id</i> <i class='arg'>channel</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This moves the specified <i class='arg'>channel</i> from the current thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and interpreter to the main interpreter of the thread with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-given <i class='arg'>id</i>. After the move the current interpreter has no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to the channel any more, but the main interpreter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread will be able to use it from now on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command waits until the other thread has incorporated the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel. Because of this it is possible to deadlock the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-participating threads by commanding the other through a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronous <b class='cmd'>thread::send</b> to transfer a channel to us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This easily extends into longer loops of threads waiting for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-each other. Other restrictions: the channel in question must
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-not be shared among multiple interpreters running in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sending thread. This automatically excludes the special channels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for standard input, output and error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal Tcl core implementation and the restriction on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring shared channels, one has to take extra measures when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring socket channels created by accepting the connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-out of the <b class='cmd'>socket</b> commands callback procedures:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server _Accept 2200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after idle [list Accept $s $ipaddr $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::transfer $tid $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="17"><b class='cmd'>thread::detach</b> <i class='arg'>channel</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This detaches the specified <i class='arg'>channel</i> from the current thread and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter. After that, the current interpreter has no access to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel any more. The channel is in the parked state until some other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(or the same) thread attaches the channel again with <b class='cmd'>thread::attach</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Restrictions: same as for transferring shared channels with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>thread::transfer</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="18"><b class='cmd'>thread::attach</b> <i class='arg'>channel</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This attaches the previously detached <i class='arg'>channel</i> in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-current thread/interpreter. For already existing channels,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command does nothing, i.e. it is not an error to attach the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-same channel more than once. The first operation will actualy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-perform the operation, while all subsequent operation will just
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do nothing. Command throws error if the <i class='arg'>channel</i> cannot be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found in the list of detached channels and/or in the current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="19"><b class='cmd'>thread::mutex</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Mutexes are most common thread synchronization primitives.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-They are used to synchronize access from two or more threads to one or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more shared resources. This command provides script-level access to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive and/or recursive mutexes. Exclusive mutexes can be locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only once by one thread, while recursive mutexes can be locked many
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-times by the same thread. For recursive mutexes, number of lock and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-unlock operations must match, otherwise, the mutex will never be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-released, which would lead to various deadlock situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Care has to be taken when using mutexes in an multithreading program.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Improper use of mutexes may lead to various deadlock situations,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-especially when using exclusive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <b class='cmd'>thread::mutex</b> command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="20"><b class='cmd'>thread::mutex</b> <strong>create</strong> ?-recursive?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the mutex and returns it's opaque handle. This handle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should be used for any future reference to the newly created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If no optional ?-recursive? argument was specified, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the exclusive mutex. With the ?-recursive? argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command creates a recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="21"><b class='cmd'>thread::mutex</b> <strong>destroy</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the <i class='arg'>mutex</i>. Mutex should be in unlocked state before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the destroy attempt. If the mutex is locked, the command will throw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="22"><b class='cmd'>thread::mutex</b> <strong>lock</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the <i class='arg'>mutex</i>. Locking the exclusive mutex may throw Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-error if on attempt to lock the same mutex twice from the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread. If your program logic forces you to lock the same mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-twice or more from the same thread (this may happen in recursive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-procedure invocations) you should consider using the recursive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="23"><b class='cmd'>thread::mutex</b> <strong>unlock</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the <i class='arg'>mutex</i> so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock the already unlocked mutex will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="24"><b class='cmd'>thread::rwmutex</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates many-readers/single-writer mutexes. Reader/writer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutexes allow you to serialize access to a shared resource more optimally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In situations where a shared resource gets mostly read and seldom modified,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-you might gain some performace by using reader/writer mutexes instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive or recursive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For reading the resource, thread should obtain a read lock on the resource.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Read lock is non-exclusive, meaning that more than one thread can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-obtain a read lock to the same resource, without waiting on other readers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For changing the resource, however, a thread must obtain a exclusive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-write lock. This lock effectively blocks all threads from gaining the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-read-lock while the resource is been modified by the writer thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only after the write lock has been released, the resource may be read-locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <b class='cmd'>thread::rwmutex</b> command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="25"><b class='cmd'>thread::rwmutex</b> <strong>create</strong></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the reader/writer mutex and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to the newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="26"><b class='cmd'>thread::rwmutex</b> <strong>destroy</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the reader/writer <i class='arg'>mutex</i>. If the mutex is already locked,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-attempt to destroy it will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="27"><b class='cmd'>thread::rwmutex</b> <strong>rlock</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the <i class='arg'>mutex</i> for reading. More than one thread may read-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same <i class='arg'>mutex</i> at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="28"><b class='cmd'>thread::rwmutex</b> <strong>wlock</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the <i class='arg'>mutex</i> for writing. Only one thread may write-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same <i class='arg'>mutex</i> at the same time. Attempt to write-lock same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>mutex</i> twice from the same thread will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="29"><b class='cmd'>thread::rwmutex</b> <strong>unlock</strong> <i class='arg'>mutex</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the <i class='arg'>mutex</i> so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock already unlocked <i class='arg'>mutex</i> will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="30"><b class='cmd'>thread::cond</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command provides script-level access to condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A condition variable creates a safe environment for the program
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to test some condition, sleep on it when false and be awakened
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-when it might have become true. A condition variable is always
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used in the conjuction with an exclusive mutex. If you attempt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to use other type of mutex in conjuction with the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable, a Tcl error will be thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="31"><b class='cmd'>thread::cond</b> <strong>create</strong></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the condition variable and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="32"><b class='cmd'>thread::cond</b> <strong>destroy</strong> <i class='arg'>cond</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys condition variable <i class='arg'>cond</i>. Extreme care has to be taken
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that nobody is using (i.e. waiting on) the condition variable,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-otherwise unexpected errors may happen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="33"><b class='cmd'>thread::cond</b> <strong>notify</strong> <i class='arg'>cond</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Wakes up all threads waiting on the condition variable <i class='arg'>cond</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="34"><b class='cmd'>thread::cond</b> <strong>wait</strong> <i class='arg'>cond</i> <i class='arg'>mutex</i> ?ms?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command is used to suspend program execution until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable <i class='arg'>cond</i> has been signalled or the optional timer has expired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The exclusive <i class='arg'>mutex</i> must be locked by the calling thread on entrance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command. If the mutex is not locked, Tcl error is thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-While waiting on the <i class='arg'>cond</i>, the command releases <i class='arg'>mutex</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Before returning to the calling thread, the command re-acquires the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>mutex</i> again. Unlocking the <i class='arg'>mutex</i> and waiting on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-condition variable <i class='arg'>cond</i> is done atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The <strong>ms</strong> command option, if given, must be an integer specifying
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time interval in milliseconds the command waits to be signalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Otherwise the command waits on condition notify forever.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In multithreading programs, there are many situations where a thread has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to wait for some event to happen until it is allowed to proceed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is usually accomplished by repeatedly testing a condition under the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutex protection and waiting on the condition variable until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluates to true:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set mutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond  [thread::cond  create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {&lt;some_condition_is_true&gt;} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::cond wait $cond $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do some work under mutex protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Repeated testing of the condition is needed since the condition variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may get signalled without the condition being actually changed (spurious
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread wake-ups, for example).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="discussion">DISCUSSION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The fundamental threading model in Tcl is that there can be one or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more Tcl interpreters per thread, but each Tcl interpreter should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only be used by a single thread which created it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A &quot;shared memory&quot; abstraction is awkward to provide in Tcl because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl makes assumptions about variable and data ownership. Therefore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this extension supports a simple form of threading where the main
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread can manage several background, or &quot;worker&quot; threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For example, an event-driven server can pass requests to worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads, and then await responses from worker threads or new client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-requests. Everything goes through the common Tcl event loop, so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-message passing between threads works naturally with event-driven I/O,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>vwait</b> on variables, and so forth. For the transfer of bulk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-information it is possible to move channels between the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For advanced multithreading scripts, script-level access to two
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-basic synchronization primitives, mutex and condition variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is also supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="see_also">SEE ALSO</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<a href="http://www.tcl.tk/doc/howto/thread_model.html">http://www.tcl.tk/doc/howto/thread_model.html</a>, tpool, tsv, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="keywords">KEYWORDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events, message passing, mutex, synchronization, thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</body></html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/html/tpool.html b/vendor/thread2.7.3/doc/html/tpool.html
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index b59f0ee11..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/html/tpool.html
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,273 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<html><head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<title>tpool - Tcl Threading </title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- Generated from file '' by tcllib/doctools with format 'html'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h1> tpool(n) 2.7  &quot;Tcl Threading&quot;</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="name">NAME</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p> tpool -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Part of the Tcl threading extension implementing pools of worker threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="table_of_contents">TABLE OF CONTENTS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#commands">COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#keywords">KEYWORDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="synopsis">SYNOPSIS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Tcl 8.4</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Thread ?2.7?</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><table border=1 width=100% cellspacing=0 cellpadding=0><tr            bgcolor=lightyellow><td bgcolor=lightyellow><table 0 width=100% cellspacing=0 cellpadding=0><tr valign=top ><td ><a href="#1"><b class='cmd'>tpool::create</b> ?options?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#2"><b class='cmd'>tpool::names</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#3"><b class='cmd'>tpool::post</b> ?-detached? ?-nowait? <i class='arg'>tpool</i> <i class='arg'>script</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#4"><b class='cmd'>tpool::wait</b> <i class='arg'>tpool</i> <i class='arg'>joblist</i> ?varname?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#5"><b class='cmd'>tpool::cancel</b> <i class='arg'>tpool</i> <i class='arg'>joblist</i> ?varname?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#6"><b class='cmd'>tpool::get</b> <i class='arg'>tpool</i> <i class='arg'>job</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#7"><b class='cmd'>tpool::preserve</b> <i class='arg'>tpool</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#8"><b class='cmd'>tpool::release</b> <i class='arg'>tpool</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</table></td></tr></table>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="description">DESCRIPTION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates and manages pools of worker threads. It allows you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to post jobs to worker threads and wait for their completion. The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool implementation is Tcl event-loop aware. That means that any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time a caller is forced to wait for an event (job being completed or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a worker thread becoming idle or initialized), the implementation will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-enter the event loop and allow for servicing of other pending file or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-timer (or any other supported) events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="commands">COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="1"><b class='cmd'>tpool::create</b> ?options?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates new threadpool. It accepts several options as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs. Options are used to tune some threadpool parameters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the newly created threadpool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Following options are supported:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt>-minworkers number<dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Minimum number of worker threads needed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-During threadpool creation, the implementation will create somany
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads upfront and will keep at least number of them alive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the lifetime of the threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 0 (zero). which means that a newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool will have no worker threads initialy. All worker threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will be started on demand by callers running <b class='cmd'>tpool::post</b> command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and posting jobs to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt>-maxworkers number<dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Maximum number of worker threads allowed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If a new job is pending and there are no idle worker threads available,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the implementation will try to create new worker thread. If the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of available worker threads is lower than the given number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-new worker thread will start. The caller will automatically enter the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event loop and wait until the worker thread has initialized. If. however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the number of available worker threads is equal to the given number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the caller will enter the event loop and wait for the first worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to get idle, thus ready to run the job.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 4 (four), which means that the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool instance will allow maximum of 4 worker threads running jobs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or being idle waiting for new jobs to get posted to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt>-idletime seconds<dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Time in seconds an idle worker thread waits for the job to get posted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the job queue. If no job arrives during this interval and the time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expires, the worker thread will check the number of currently available
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads and if the number is higher than the number set by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<strong>minthreads</strong> option, it will exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If an <strong>exitscript</strong> has been defined, the exiting worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will first run the script and then exit. Errors from the exit script,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if any, are ignored.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The idle worker thread is not servicing the event loop. If you, however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-put the worker thread into the event loop, by evaluating the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>vwait</b> or other related Tcl commands, the worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will not be in the idle state, hence the idle timer will not be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-taken into account.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt>-initcmd script<dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script used to initialize new worker thread. This is usually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to load packages and commands in the worker, set default variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create namespaces, and such. If the passed script runs into a Tcl error,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker will not be created and the initiating command (either the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>tpool::create</b> or <b class='cmd'>tpool::post</b>) will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, hence, the Tcl interpreter of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker thread will contain just the initial set of Tcl commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt>-exitcmd script<dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script run when the idle worker thread exits. This is normaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to cleanup the state of the worker thread, release reserved resources,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cleanup memory and such.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, thus no Tcl script will run
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-on the worker thread exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="2"><b class='cmd'>tpool::names</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of IDs of threadpools created with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>tpool::create</b> command. If no threadpools were found, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return empty list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="3"><b class='cmd'>tpool::post</b> ?-detached? ?-nowait? <i class='arg'>tpool</i> <i class='arg'>script</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sends a <i class='arg'>script</i> to the target <i class='arg'>tpool</i> threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for execution. The script will be executed in the first available idle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker thread. If there are no idle worker threads available, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will create new one, enter the event loop and service events until the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-newly created thread is initialized. If the current number of worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads is equal to the maximum number of worker threads, as defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the threadpool creation, the command will enter the event loop and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-service events while waiting for one of the worker threads to become idle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional ?-nowait? argument is given, the command will not wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for one idle worker. It will just place the job in the pool's job queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and return immediately.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the posted job. This ID is used for subsequent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>tpool::wait</b>, <b class='cmd'>tpool::get</b> and <b class='cmd'>tpool::cancel</b> commands to wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for and retrieve result of the posted script, or cancel the posted job
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-respectively. If the optional ?-detached? argument is specified, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will post a detached job. A detached job can not be cancelled or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waited upon and is not identified by the job ID.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the threadpool <i class='arg'>tpool</i> is not found in the list of active
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread pools, the command will throw error. The error will also be triggered
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if the newly created worker thread fails to initialize.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="4"><b class='cmd'>tpool::wait</b> <i class='arg'>tpool</i> <i class='arg'>joblist</i> ?varname?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for one or many jobs, whose job IDs are given in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>joblist</i> to get processed by the worker thread(s). If none of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified jobs are ready, the command will enter the event loop, service
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events and wait for the first job to get ready.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of completed job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-?varname? is given, it will be set to the list of jobs in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>joblist</i> which are still pending. If the threadpool <i class='arg'>tpool</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="5"><b class='cmd'>tpool::cancel</b> <i class='arg'>tpool</i> <i class='arg'>joblist</i> ?varname?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command cancels the previously posted jobs given by the <i class='arg'>joblist</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the pool <i class='arg'>tpool</i>. Job cancellation succeeds only for job still
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waiting to be processed. If the job is already being executed by one of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker threads, the job will not be cancelled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of cancelled job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-?varname? is given, it will be set to the list of jobs in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>joblist</i> which were not cancelled. If the threadpool <i class='arg'>tpool</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="6"><b class='cmd'>tpool::get</b> <i class='arg'>tpool</i> <i class='arg'>job</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command retrieves the result of the previously posted <i class='arg'>job</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only results of jobs waited upon with the <b class='cmd'>tpool::wait</b> command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be retrieved. If the execution of the script resulted in error,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command will throw the error and update the <strong>errorInfo</strong> and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<strong>errorCode</strong> variables correspondingly. If the pool <i class='arg'>tpool</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of threadpools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the job <i class='arg'>job</i> is not ready for retrieval, because it is currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-being executed by the worker thread, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="7"><b class='cmd'>tpool::preserve</b> <i class='arg'>tpool</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command increments the reference counter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool <i class='arg'>tpool</i> by one (1). Command returns the value of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the increment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-By incrementing the reference counter, the caller signalizes that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she wishes to use the resource for a longer period of time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="8"><b class='cmd'>tpool::release</b> <i class='arg'>tpool</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command decrements the reference counter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool <i class='arg'>tpool</i> by one (1).Command returns the value of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the decrement.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the threadpool <i class='arg'>tpool</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is marked for termination. You should not reference the threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the <b class='cmd'>tpool::release</b> command returns zero. The <i class='arg'>tpool</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-handle goes out of scope and should not be used any more. Any following
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference to the same threadpool handle will result in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="discussion">DISCUSSION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threadpool is one of the most common threading paradigm when it comes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to server applications handling a large number of relatively small tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A very simplistic model for building a server application would be to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create a new thread each time a request arrives and service the request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the new thread. One of the disadvantages of this approach is that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the overhead of creating a new thread for each request is significant;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a server that created a new thread for each request would spend more time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and consume more system resources in creating and destroying threads than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in processing actual user requests. In addition to the overhead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creating and destroying threads, active threads consume system resources.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creating too many threads can cause the system to run out of memory or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trash due to excessive memory consumption.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread pool offers a solution to both the problem of thread life-cycle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-overhead and the problem of resource trashing. By reusing threads for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-multiple tasks, the thread-creation overhead is spread over many tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As a bonus, because the thread already exists when a request arrives,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the delay introduced by thread creation is eliminated. Thus, the request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be serviced immediately. Furthermore, by properly tuning the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of threads in the thread pool, resource thrashing may also be eliminated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-by forcing any request to wait until a thread is available to process it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="see_also">SEE ALSO</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tsv, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="keywords">KEYWORDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</body></html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/html/tsv.html b/vendor/thread2.7.3/doc/html/tsv.html
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 40bbb96ea..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/html/tsv.html
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,471 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<html><head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<title>tsv - Tcl Threading </title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- Generated from file '' by tcllib/doctools with format 'html'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h1> tsv(n) 2.7  &quot;Tcl Threading&quot;</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="name">NAME</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p> tsv - 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Part of the Tcl threading extension allowing script level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    manipulation of data shared between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="table_of_contents">TABLE OF CONTENTS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#element_commands">ELEMENT COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#list_commands">LIST COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#array_commands">ARRAY COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#keyed_list_commands">KEYED LIST COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#credits">CREDITS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#keywords">KEYWORDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="synopsis">SYNOPSIS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Tcl 8.4</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Thread ?2.7?</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><table border=1 width=100% cellspacing=0 cellpadding=0><tr            bgcolor=lightyellow><td bgcolor=lightyellow><table 0 width=100% cellspacing=0 cellpadding=0><tr valign=top ><td ><a href="#1"><b class='cmd'>tsv::names</b> ?pattern?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#2"><b class='cmd'>tsv::object</b> <i class='arg'>varname</i> <i class='arg'>element</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#3"><b class='cmd'>tsv::set</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?value?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#4"><b class='cmd'>tsv::get</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?namedvar?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#5"><b class='cmd'>tsv::unset</b> <i class='arg'>varname</i> ?element?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#6"><b class='cmd'>tsv::exists</b> <i class='arg'>varname</i> <i class='arg'>element</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#7"><b class='cmd'>tsv::pop</b> <i class='arg'>varname</i> <i class='arg'>element</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#8"><b class='cmd'>tsv::move</b> <i class='arg'>varname</i> <i class='arg'>oldname</i> <i class='arg'>newname</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#9"><b class='cmd'>tsv::incr</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?count?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#10"><b class='cmd'>tsv::append</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>value</i> ?value ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#11"><b class='cmd'>tsv::lock</b> <i class='arg'>varname</i> <i class='arg'>arg</i> ?arg ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#12"><b class='cmd'>tsv::lappend</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>value</i> ?value ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#13"><b class='cmd'>tsv::linsert</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>index</i> <i class='arg'>value</i> ?value ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#14"><b class='cmd'>tsv::lreplace</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>first</i> <i class='arg'>last</i> ?value ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#15"><b class='cmd'>tsv::llength</b> <i class='arg'>varname</i> <i class='arg'>element</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#16"><b class='cmd'>tsv::lindex</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#17"><b class='cmd'>tsv::lrange</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>from</i> <i class='arg'>to</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#18"><b class='cmd'>tsv::lsearch</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?options? <i class='arg'>pattern</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#19"><b class='cmd'>tsv::lset</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>index</i> ?index ...? <i class='arg'>value</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#20"><b class='cmd'>tsv::lpop</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#21"><b class='cmd'>tsv::lpush</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#22"><b class='cmd'>tsv::array set</b> <i class='arg'>varname</i> <i class='arg'>list</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#23"><b class='cmd'>tsv::array get</b> <i class='arg'>varname</i> ?pattern?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#24"><b class='cmd'>tsv::array names</b> <i class='arg'>varname</i> ?pattern?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#25"><b class='cmd'>tsv::array size</b> <i class='arg'>varname</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#26"><b class='cmd'>tsv::array reset</b> <i class='arg'>varname</i> <i class='arg'>list</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#27"><b class='cmd'>tsv::array bind</b> <i class='arg'>varname</i> <i class='arg'>handle</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#28"><b class='cmd'>tsv::array unbind</b> <i class='arg'>varname</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#29"><b class='cmd'>tsv::array isbound</b> <i class='arg'>varname</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#30"><b class='cmd'>tsv::keyldel</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#31"><b class='cmd'>tsv::keylget</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i> ?retvar?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#32"><b class='cmd'>tsv::keylkeys</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> ?key?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#33"><b class='cmd'>tsv::keylset</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i> <i class='arg'>value</i> ?key value..?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</table></td></tr></table>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="description">DESCRIPTION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands implementing thread shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread shared variable is very similar to a Tcl array but in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-contrast to a Tcl array it is created in shared memory and can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be accessed from many threads at the same time. Important feature of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread shared variable is that each access to the variable is internaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-protected by a mutex so script programmer does not have to take care 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about locking the variable himself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are not bound to any thread explicitly. That 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-means that when a thread which created any of thread shared variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exits, the variable and associated memory is not unset/reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-User has to explicitly unset the variable to reclaim the memory 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-consumed by the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="element_commands">ELEMENT COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="1"><b class='cmd'>tsv::names</b> ?pattern?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of shared variables matching optional ?pattern? 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or all known variables if pattern is ommited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="2"><b class='cmd'>tsv::object</b> <i class='arg'>varname</i> <i class='arg'>element</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates object accessor command for the <i class='arg'>element</i> in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable <i class='arg'>varname</i>. Using this command, one can apply most 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the other shared variable commands as method functions of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the element object command. The object command is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted when the element which this command is pointing to is unset.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::set foo bar &quot;A shared string&quot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set string [tsv::object foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % $string append &quot; appended&quot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    =&gt; A shared string appended
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="3"><b class='cmd'>tsv::set</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?value?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets the value of the <i class='arg'>element</i> in the shared variable <i class='arg'>varname</i> 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to <i class='arg'>value</i> and returns the value to caller. The <i class='arg'>value</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may be ommited, in which case the command will return the current 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-value of the element. If the element cannot be found, error is triggered.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="4"><b class='cmd'>tsv::get</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?namedvar?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Retrieves the value of the <i class='arg'>element</i> from the shared variable <i class='arg'>varname</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional argument <i class='arg'>namedvar</i> is given, the value is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stored in the named variable. Return value of the command depends 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the existence of the optional argument <i class='arg'>namedvar</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the argument is ommited and the requested element cannot be found 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared array, the command triggers error. If, however, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional argument is given on the command line, the command returns 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-true (1) if the element is found or false (0) if the element is not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="5"><b class='cmd'>tsv::unset</b> <i class='arg'>varname</i> ?element?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unsets the <i class='arg'>element</i> from the shared variable <i class='arg'>varname</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional element is not given, it deletes the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="6"><b class='cmd'>tsv::exists</b> <i class='arg'>varname</i> <i class='arg'>element</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Checks wether the <i class='arg'>element</i> exists in the shared variable <i class='arg'>varname</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and returns true (1) if it does or false (0) if it doesn't.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="7"><b class='cmd'>tsv::pop</b> <i class='arg'>varname</i> <i class='arg'>element</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns value of the <i class='arg'>element</i> in the shared variable <i class='arg'>varname</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and unsets the element, all in one atomic operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="8"><b class='cmd'>tsv::move</b> <i class='arg'>varname</i> <i class='arg'>oldname</i> <i class='arg'>newname</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Renames the element <i class='arg'>oldname</i> to the <i class='arg'>newname</i> in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable <i class='arg'>varname</i>. This effectively performs an get/unset/set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sequence of operations but all in one atomic step.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="9"><b class='cmd'>tsv::incr</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?count?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>incr</b> command but increments the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the <i class='arg'>element</i> in shared variaboe <i class='arg'>varname</i> instead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="10"><b class='cmd'>tsv::append</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>value</i> ?value ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>append</b> command but appends one or more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values to the <i class='arg'>element</i> in shared variable <i class='arg'>varname</i> instead of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="11"><b class='cmd'>tsv::lock</b> <i class='arg'>varname</i> <i class='arg'>arg</i> ?arg ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the internal mutex protection. During the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script evaluation, the entire shared variable is locked. For shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable commands within the script, internal locking is disabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so no deadlock can occur. It is also allowed to unset the shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable from within the script. The shared variable is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created if it did not exists at the time of the first lock operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::lock foo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts stderr [tsv::set foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::unset foo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="list_commands">LIST COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Those command are similar to the equivalently named Tcl command. The difference
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is that they operate on elements of shared arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="12"><b class='cmd'>tsv::lappend</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>value</i> ?value ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lappend</b> command but appends one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values to the <i class='arg'>element</i> in shared variable <i class='arg'>varname</i> 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="13"><b class='cmd'>tsv::linsert</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>index</i> <i class='arg'>value</i> ?value ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>linsert</b> command but inserts one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values at the <i class='arg'>index</i> list position in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>element</i> in the shared variable <i class='arg'>varname</i> instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="14"><b class='cmd'>tsv::lreplace</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>first</i> <i class='arg'>last</i> ?value ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lreplace</b> command but replaces one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values between the <i class='arg'>first</i> and <i class='arg'>last</i> position 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the <i class='arg'>element</i> of the shared variable <i class='arg'>varname</i> instead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="15"><b class='cmd'>tsv::llength</b> <i class='arg'>varname</i> <i class='arg'>element</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>llength</b> command but returns length 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the <i class='arg'>element</i> in the shared variable <i class='arg'>varname</i> instead of the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="16"><b class='cmd'>tsv::lindex</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lindex</b> command but returns the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the <i class='arg'>index</i> list position of the <i class='arg'>element</i> from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the shared variable <i class='arg'>varname</i> instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="17"><b class='cmd'>tsv::lrange</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>from</i> <i class='arg'>to</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lrange</b> command but returns values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-between <i class='arg'>from</i> and <i class='arg'>to</i> list positions from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>element</i> in the shared variable <i class='arg'>varname</i> instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="18"><b class='cmd'>tsv::lsearch</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?options? <i class='arg'>pattern</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lsearch</b> command but searches the <i class='arg'>element</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable <i class='arg'>varname</i> instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="19"><b class='cmd'>tsv::lset</b> <i class='arg'>varname</i> <i class='arg'>element</i> <i class='arg'>index</i> ?index ...? <i class='arg'>value</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl <b class='cmd'>lset</b> command but sets the <i class='arg'>element</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable <i class='arg'>varname</i> instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="20"><b class='cmd'>tsv::lpop</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to the standard Tcl <b class='cmd'>lindex</b> command but in addition to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returning, it also splices the value out of the <i class='arg'>element</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from the shared variable <i class='arg'>varname</i> in one atomic operation. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In contrast to the Tcl <b class='cmd'>lindex</b> command, this command returns 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="21"><b class='cmd'>tsv::lpush</b> <i class='arg'>varname</i> <i class='arg'>element</i> ?index?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command performes the opposite of the <b class='cmd'>tsv::lpop</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As its counterpart, it returns no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="array_commands">ARRAY COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command supports most of the options of the standard Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>array</b> command. In addition to those, it allows binding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a shared variable to some persisten storage databases. Currently 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the only persistent option supported is the famous GNU Gdbm 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database. This option has to be selected during the package 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compilation time. The implementation provides hooks for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-defining other persistency layers, if needed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="22"><b class='cmd'>tsv::array set</b> <i class='arg'>varname</i> <i class='arg'>list</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl <b class='cmd'>array set</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="23"><b class='cmd'>tsv::array get</b> <i class='arg'>varname</i> ?pattern?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl <b class='cmd'>array get</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="24"><b class='cmd'>tsv::array names</b> <i class='arg'>varname</i> ?pattern?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl <b class='cmd'>array names</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="25"><b class='cmd'>tsv::array size</b> <i class='arg'>varname</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl <b class='cmd'>array size</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="26"><b class='cmd'>tsv::array reset</b> <i class='arg'>varname</i> <i class='arg'>list</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl <b class='cmd'>array set</b> but it clears
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the <i class='arg'>varname</i> and sets new values from the list atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="27"><b class='cmd'>tsv::array bind</b> <i class='arg'>varname</i> <i class='arg'>handle</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Binds the <i class='arg'>varname</i> to the persistent storage <i class='arg'>handle</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The format of the <i class='arg'>handle</i> is &lt;handler&gt;:&lt;address&gt;. For the built-in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GNU Gdbm persistence layer, the format of the handle is &quot;gdbm:&lt;path&gt;&quot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-where &lt;path&gt; is the path to the Gdbm database file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="28"><b class='cmd'>tsv::array unbind</b> <i class='arg'>varname</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unbinds the shared <i class='arg'>array</i> from its bound persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="29"><b class='cmd'>tsv::array isbound</b> <i class='arg'>varname</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if the shared <i class='arg'>varname</i> is bound to some 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-persistent storage or zero (0) if not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="keyed_list_commands">KEYED LIST COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Keyed list commands are borrowed from the TclX package. Keyed lists provide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a structured data type built upon standard Tcl lists. This is a functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-similar to structs in the C programming language.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A keyed list is a list in which each element contains a key and value 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pair. These element pairs are stored as lists themselves, where the key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is the first element of the list, and the value is the second. The 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs are referred to as fields.  This is an example of a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-keyed list:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {{NAME  {Frank  Zappa}} {JOB {musician and composer}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Fields may contain subfields; `.' is the separator character. Subfields 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are actually fields  where the value is another keyed list. Thus the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following list has the top level fields ID and NAME, and subfields 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NAME.FIRST and NAME.LAST:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {ID 106} {NAME {{FIRST Frank} {LAST Zappa}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-There is no limit to the recursive depth of subfields,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-allowing one to build complex data structures. Keyed lists are constructed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and accessed via a number of commands. All  keyed  list management 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands take the name of the variable containing the keyed list as an 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-argument (i.e. passed by reference), rather than passing the list directly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="30"><b class='cmd'>tsv::keyldel</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Delete the field specified by <i class='arg'>key</i> from the keyed list <i class='arg'>keylist</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable <i class='arg'>varname</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This removes both the key and the value from the keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="31"><b class='cmd'>tsv::keylget</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i> ?retvar?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return the value associated with <i class='arg'>key</i> from the keyed list <i class='arg'>keylist</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable <i class='arg'>varname</i>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional <i class='arg'>retvar</i> is not specified, then the value will be 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returned as the result of the command. In this case, if key is not found 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the list, an error will result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If <i class='arg'>retvar</i> is specified and <i class='arg'>key</i> is in the list, then the value 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is returned in the variable <i class='arg'>retvar</i> and the command returns 1 if the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key was present within the list. If <i class='arg'>key</i> isn't in the list, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return 0, and <i class='arg'>retvar</i> will be left unchanged. If {} is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified for <i class='arg'>retvar</i>, the value is not returned, allowing the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-programmer to determine if a <i class='arg'>key</i> is present in a keyed list without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-setting a variable as a side-effect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="32"><b class='cmd'>tsv::keylkeys</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> ?key?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return  the a list of the keys in the keyed list <i class='arg'>keylist</i> in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable <i class='arg'>varname</i>. If <i class='arg'>key</i> is specified, then it is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the name of a key field who's subfield keys are to be retrieved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="33"><b class='cmd'>tsv::keylset</b> <i class='arg'>varname</i> <i class='arg'>keylist</i> <i class='arg'>key</i> <i class='arg'>value</i> ?key value..?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Set the value associated with <i class='arg'>key</i>, in the keyed list <i class='arg'>keylist</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to <i class='arg'>value</i>. If the <i class='arg'>keylist</i> does not exists, it is created. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If <i class='arg'>key</i> is not currently in the list, it will be added. If it already
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exists, <i class='arg'>value</i> replaces the existing value. Multiple keywords and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values may be specified, if desired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="discussion">DISCUSSION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The current implementation of thread shared variables allows for easy and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-convenient access to data shared between different threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Internally, the data is stored in Tcl objects and all package commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-operate on internal data representation, thus minimizing shimmering and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-improving performance. Special care has been taken to assure that all 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-object data is properly locked and deep-copied when moving objects between
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal design of the Tcl core, there is no provision of full 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-integration of shared variables within the Tcl syntax, unfortunately. All
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to shared data must be performed with the supplied package commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Also, variable traces are not supported. But even so, benefits of easy, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simple and safe shared data manipulation outweights imposed limitations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="credits">CREDITS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are inspired by the nsv interface found in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AOLserver, a highly scalable Web server from America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="see_also">SEE ALSO</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tpool, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="keywords">KEYWORDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-locking, synchronization, thread shared data, threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</body></html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/html/ttrace.html b/vendor/thread2.7.3/doc/html/ttrace.html
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0b9d07bca..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/html/ttrace.html
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,315 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<html><head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<title>ttrace - Tcl Threading </title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</head>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<! -- Generated from file '' by tcllib/doctools with format 'html'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -->
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h1> ttrace(n) 2.7  &quot;Tcl Threading&quot;</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="name">NAME</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p> ttrace - Trace-based interpreter initialization
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="table_of_contents">TABLE OF CONTENTS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#user_commands">USER COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#callback_commands">CALLBACK COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#keywords">KEYWORDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="synopsis">SYNOPSIS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Tcl 8.4</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require <b>Thread ?2.7?</b><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><table border=1 width=100% cellspacing=0 cellpadding=0><tr            bgcolor=lightyellow><td bgcolor=lightyellow><table 0 width=100% cellspacing=0 cellpadding=0><tr valign=top ><td ><a href="#1"><b class='cmd'>ttrace::eval</b> <i class='arg'>arg</i> ?arg ...?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#2"><b class='cmd'>ttrace::enable</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#3"><b class='cmd'>ttrace::disable</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#4"><b class='cmd'>ttrace::cleanup</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#5"><b class='cmd'>ttrace::update</b> ?epoch?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#6"><b class='cmd'>ttrace::getscript</b> </a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#7"><b class='cmd'>ttrace::atenable</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#8"><b class='cmd'>ttrace::atdisable</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#9"><b class='cmd'>ttrace::addtrace</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#10"><b class='cmd'>ttrace::addscript</b> <i class='arg'>name</i> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#11"><b class='cmd'>ttrace::addresolver</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#12"><b class='cmd'>ttrace::addcleanup</b> <i class='arg'>body</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#13"><b class='cmd'>ttrace::addentry</b> <i class='arg'>cmd</i> <i class='arg'>var</i> <i class='arg'>val</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#14"><b class='cmd'>ttrace::getentry</b> <i class='arg'>cmd</i> <i class='arg'>var</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#15"><b class='cmd'>ttrace::getentries</b> <i class='arg'>cmd</i> ?pattern?</a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#16"><b class='cmd'>ttrace::delentry</b> <i class='arg'>cmd</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<tr valign=top ><td ><a href="#17"><b class='cmd'>ttrace::preload</b> <i class='arg'>cmd</i></a></td></tr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</table></td></tr></table>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="description">DESCRIPTION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates a framework for on-demand replication of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter state accross threads in an multithreading application.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It relies on the mechanics of Tcl command tracing and the Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>unknown</b> command and mechanism.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The package requires Tcl threading extension but can be alternatively
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used stand-alone within the AOLserver, a scalable webserver from 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In a nutshell, a short sample illustrating the usage of the ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with the Tcl threading extension:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p><table><tr><td bgcolor=black>&nbsp;</td><td><pre class='sample'>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % package require Ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    2.7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t1 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % ttrace::eval {proc test args {return test-[thread::id]}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t1 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t2 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t2 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</pre></td></tr></table></p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As seen from above, the <b class='cmd'>ttrace::eval</b> and <b class='cmd'>ttrace::update</b>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands are used to create a thread-wide definition of a simple 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl procedure and replicate that definition to all, already existing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or later created, threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="user_commands">USER COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes user-level commands. Those commands can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used by script writers to control the execution of the tracing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="1"><b class='cmd'>ttrace::eval</b> <i class='arg'>arg</i> ?arg ...?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates given arguments and evaluates the resulting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl command with trace framework enabled. If the command execution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-was ok, it takes necessary steps to automatically propagate the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace epoch change to all threads in the application. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For AOLserver, only newly created threads actually receive the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-epoch change. For the Tcl threading extension, all threads created by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the extension are automatically updated. If the command execution 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in Tcl error, no state propagation takes place.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is the most important user-level command of the package as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-it wraps most of the commands described below. This greatly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simplifies things, because user need to learn just this (one)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command in order to effectively use the package. Other commands, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as desribed below, are included mostly for the sake of completeness.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="2"><b class='cmd'>ttrace::enable</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Activates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and starts a new trace epoch. The trace epoch encapsulates all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes done to the interpreter during the time traces are activated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="3"><b class='cmd'>ttrace::disable</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deactivates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and closes the current trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="4"><b class='cmd'>ttrace::cleanup</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to clean-up all on-demand loaded resources in the interpreter. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It effectively brings Tcl interpreter to its pristine state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="5"><b class='cmd'>ttrace::update</b> ?epoch?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to refresh the state of the interpreter to match the optional 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace ?epoch?. If the optional ?epoch? is not given, it takes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the most recent trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="6"><b class='cmd'>ttrace::getscript</b> </a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns a synthetized Tcl script which may be sourced in any interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This script sets the stage for the Tcl <b class='cmd'>unknown</b> command so it can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-load traced resources from the in-memory database. Normally, this command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is automatically invoked by other higher-level commands like
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>ttrace::eval</b> and <b class='cmd'>ttrace::update</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="callback_commands">CALLBACK COMMANDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A word upfront: the package already includes callbacks for tracing 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following Tcl commands: <b class='cmd'>proc</b>, <b class='cmd'>namespace</b>, <b class='cmd'>variable</b>,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>load</b>, and <b class='cmd'>rename</b>. Additionaly, a set of callbacks for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tracing resources (object, clasess) for the XOTcl v1.3.8+, an 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OO-extension to Tcl, is also provided.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This gives a solid base for solving most of the real-life needs and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-serves as an example for people wanting to customize the package 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to cover their specific needs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Below, you can find commands for registering callbacks in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework and for writing callback scripts. These callbacks are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked by the framework in order to gather interpreter state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes, build in-memory database, perform custom-cleanups and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-various other tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="7"><b class='cmd'>ttrace::atenable</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at <b class='cmd'>ttrace::enable</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, <i class='arg'>cmd</i>, a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, <i class='arg'>arglist</i> and the <i class='arg'>body</i> of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl <b class='cmd'>proc</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="8"><b class='cmd'>ttrace::atdisable</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at <b class='cmd'>ttrace::disable</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, <i class='arg'>cmd</i>, a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, <i class='arg'>arglist</i> and the <i class='arg'>body</i> of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl <b class='cmd'>proc</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="9"><b class='cmd'>ttrace::addtrace</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for tracing the Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>cmd</b> command. The callback definition includes the name of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl command to trace, <i class='arg'>cmd</i>, a list of callback arguments, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>arglist</i> and the <i class='arg'>body</i> of the callback. Effectively, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this actually resembles the call interface of the standard Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>proc</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="10"><b class='cmd'>ttrace::addscript</b> <i class='arg'>name</i> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for building a Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to be passed to other interpreters. This script is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to set the stage for the Tcl <b class='cmd'>unknown</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The callback definition includes the name of the callback,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<i class='arg'>name</i> and the <i class='arg'>body</i> of the callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="11"><b class='cmd'>ttrace::addresolver</b> <i class='arg'>cmd</i> <i class='arg'>arglist</i> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the overloaded Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>unknown</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This callback is used to resolve the resource and load the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource in the current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="12"><b class='cmd'>ttrace::addcleanup</b> <i class='arg'>body</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the <b class='cmd'>trace::cleanup</b>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="13"><b class='cmd'>ttrace::addentry</b> <i class='arg'>cmd</i> <i class='arg'>var</i> <i class='arg'>val</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Adds one entry to the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="14"><b class='cmd'>ttrace::getentry</b> <i class='arg'>cmd</i> <i class='arg'>var</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns the value of the entry from the named in-memory database. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="15"><b class='cmd'>ttrace::getentries</b> <i class='arg'>cmd</i> ?pattern?</a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of all entries from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="16"><b class='cmd'>ttrace::delentry</b> <i class='arg'>cmd</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deletes an entry from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<br><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<dt><a name="17"><b class='cmd'>ttrace::preload</b> <i class='arg'>cmd</i></a><dd>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers the Tcl command to be loaded in the interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Commands registered this way will always be the part of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the interpreter and not be on-demand loaded by the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>unknown</b> command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</dl>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="discussion">DISCUSSION</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Common introspective state-replication approaches use a custom Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to introspect the running interpreter and synthesize another
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl script to replicate this state in some other interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package, on the contrary, uses Tcl command traces. Command 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-traces are registered on selected Tcl commands, like <b class='cmd'>proc</b>, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<b class='cmd'>namespace</b>, <b class='cmd'>load</b> and other standard (and/or user-defined)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl commands. When activated, those traces build an in-memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database of created resources. This database is used as a resource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-repository for the (overloaded) Tcl <b class='cmd'>unknown</b> command which 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the requested resource in the interpreter on demand. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This way, users can update just one interpreter (master) in one 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and replicate that interpreter state (or part of it) to other 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads/interpreters in the process.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Immediate benefit of such approach is the much smaller memory footprint
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the application and much faster thread creation. By not actually 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-loading all necessary procedures (and other resources) in every thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the thread initialization time, but by deffering this to the time the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource is actually referenced, significant improvements in both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-memory consumption and thread initialization time can be achieved. Some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tests have shown that memory footprint of an multithreading Tcl application
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-went down more than three times and thread startup time was reduced for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about 50 times. Note that your mileage may vary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Other benefits include much finer control about what (and when) gets 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-replicated from the master to other Tcl thread/interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="see_also">SEE ALSO</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tpool, tsv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h2><a name="keywords">KEYWORDS</a></h2>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command tracing, introspection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</body></html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/man.macros b/vendor/thread2.7.3/doc/man.macros
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 8626abf92..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/man.macros
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,236 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" The definitions below are for supplemental macros used in Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" manual entries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AP type name in/out ?indent?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start paragraph describing an argument to a library procedure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   type is type of argument (int, etc.), in/out is either "in", "out",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   or "in/out" to describe whether procedure reads or modifies arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   and indent is equivalent to second arg of .IP (shouldn't ever be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   needed;  use .AS below instead)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AS ?type? ?name?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Give maximum sizes of arguments for setting tab stops.  Type and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   name are examples of largest possible arguments that will be passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   to .AP later.  If args are omitted, default tab stops are used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start box enclosure.  From here until next .BE, everything will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   enclosed in one large box.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of box enclosure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VS ?version? ?br?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin vertical sidebar, for use in marking newly-changed parts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   of man pages.  The first argument is ignored and used for recording
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the version when the .VS was added, so that the sidebars can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   found and removed when they reach a certain age.  If another argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   is present, then a line break is forced before starting the sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of vertical sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin an indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of list of standard options for a Tk widget.  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   options follow on successive lines, in four columns separated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   by tabs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of list of standard options for a Tk widget.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .OP cmdName dbName dbClass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of description of a specific option.  cmdName gives the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   option's name as specified in the class command, dbName gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's name in the option database, and dbClass gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's class in the option database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .UL arg1 arg2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Print arg1 underlined, then print arg2 normally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .wh -1.3i ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^l \n(.l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ad b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Start an argument description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$4"" .TP \\$4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   ie !"\\$2"" .TP \\n()Cu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   el          .TP 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta \\n()Au \\n()Bu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$3"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP    (\\$3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\".b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$2"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\fI\\$1\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # define tabbing values for .AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )A 10n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )B \\n()Au+15n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )C \\n()Bu+\\w'(in/out)'u+2n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.AS Tcl_Interp Tcl_CreateInterp in/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BS - start boxed text
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^b = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n \l'\\n(.lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BE - end boxed text (draw box now)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n \l'\\n(^lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw four-sided box normally, but don't draw top of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   box if the box started on an earlier page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VS - start vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^Y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^v = 1 (for troff;  for nroff this doesn't matter)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc \s12\(br\s0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el .nr ^v 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VE - end of vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^v 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Special macro to handle page bottom:  finish off current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # box/sidebar if in box/sidebar mode, then invoked standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # page bottom macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw three-sided box if this is the box's first page,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   draw two sides but no top otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^x \\n(^tu+1v-\\n(^Yu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.bp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DS - begin display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DE - end display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SO - start of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "STANDARD OPTIONS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 5.5c 11c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SE - end of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See the \\fBoptions\\fR manual entry for details on the standard options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # OP - start of full description for a single option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de OP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 4c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command-Line Name: \\fB\\$1\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Name:     \\fB\\$2\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Class:    \\fB\\$3\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CS - begin code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta .25i .5i .75i 1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CE - end code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de UL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\\$1\l'|0\(ul'\\$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/man/thread.n b/vendor/thread2.7.3/doc/man/thread.n
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index afd3fb8d7..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/man/thread.n
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,799 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" Generated from file '' by tcllib/doctools with format 'nroff'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" The definitions below are for supplemental macros used in Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" manual entries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AP type name in/out ?indent?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start paragraph describing an argument to a library procedure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   type is type of argument (int, etc.), in/out is either "in", "out",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   or "in/out" to describe whether procedure reads or modifies arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   and indent is equivalent to second arg of .IP (shouldn't ever be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   needed;  use .AS below instead)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AS ?type? ?name?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Give maximum sizes of arguments for setting tab stops.  Type and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   name are examples of largest possible arguments that will be passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   to .AP later.  If args are omitted, default tab stops are used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start box enclosure.  From here until next .BE, everything will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   enclosed in one large box.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of box enclosure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VS ?version? ?br?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin vertical sidebar, for use in marking newly-changed parts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   of man pages.  The first argument is ignored and used for recording
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the version when the .VS was added, so that the sidebars can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   found and removed when they reach a certain age.  If another argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   is present, then a line break is forced before starting the sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of vertical sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin an indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of list of standard options for a Tk widget.  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   options follow on successive lines, in four columns separated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   by tabs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of list of standard options for a Tk widget.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .OP cmdName dbName dbClass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of description of a specific option.  cmdName gives the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   option's name as specified in the class command, dbName gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's name in the option database, and dbClass gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's class in the option database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .UL arg1 arg2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Print arg1 underlined, then print arg2 normally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .wh -1.3i ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^l \n(.l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ad b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Start an argument description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$4"" .TP \\$4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   ie !"\\$2"" .TP \\n()Cu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   el          .TP 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta \\n()Au \\n()Bu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$3"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP    (\\$3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\".b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$2"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\fI\\$1\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # define tabbing values for .AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )A 10n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )B \\n()Au+15n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )C \\n()Bu+\\w'(in/out)'u+2n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.AS Tcl_Interp Tcl_CreateInterp in/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BS - start boxed text
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^b = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n \l'\\n(.lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BE - end boxed text (draw box now)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n \l'\\n(^lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw four-sided box normally, but don't draw top of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   box if the box started on an earlier page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VS - start vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^Y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^v = 1 (for troff;  for nroff this doesn't matter)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc \s12\(br\s0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el .nr ^v 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VE - end of vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^v 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Special macro to handle page bottom:  finish off current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # box/sidebar if in box/sidebar mode, then invoked standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # page bottom macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw three-sided box if this is the box's first page,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   draw two sides but no top otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^x \\n(^tu+1v-\\n(^Yu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.bp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DS - begin display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DE - end display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SO - start of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "STANDARD OPTIONS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 5.5c 11c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SE - end of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See the \\fBoptions\\fR manual entry for details on the standard options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # OP - start of full description for a single option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de OP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 4c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command-Line Name: \\fB\\$1\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Name:     \\fB\\$2\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Class:    \\fB\\$3\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CS - begin code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta .25i .5i .75i 1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CE - end code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de UL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\\$1\l'|0\(ul'\\$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TH "thread" n 2.7  "Tcl Threading"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "NAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread \- Extension for script access to Tcl threading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SYNOPSIS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBTcl  8.4\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBThread  ?2.7?\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::create\fR ?-joinable? ?-preserved? ?script?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::preserve\fR ?id?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::release\fR ?-wait? ?id?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::id\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::errorproc\fR ?procname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::unwind\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::exit\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::names\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::exists\fR \fIid\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::send\fR ?-async? ?-head? \fIid\fR \fIscript\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::broadcast\fR \fIid\fR \fIscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::wait\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::eval\fR ?-lock mutex? \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::join\fR \fIid\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::configure\fR \fIid\fR ?option? ?value? ?...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::transfer\fR \fIid\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::detach\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::attach\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBcreate\fR ?-recursive?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBdestroy\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBunlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBcreate\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBdestroy\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBrlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBwlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBunlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBcreate\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBdestroy\fR \fIcond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBnotify\fR \fIcond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBwait\fR \fIcond\fR \fImutex\fR ?ms?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DESCRIPTION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fBthread\fR extension creates threads that contain Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreters, and it lets you send scripts to those threads for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Additionaly, it provides script-level access to basic thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronization primitives, like mutexes and condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands for creating and destroying threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and sending scripts to threads for evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::create\fR ?-joinable? ?-preserved? ?script?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates a thread that contains a Tcl interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The Tcl interpreter either evaluates the optional \fBscript\fR, if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, or it waits in the event loop for scripts that arrive via
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the \fBthread::send\fR command. The result, if any, of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional \fBscript\fR is never returned to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The result of \fBthread::create\fR is the ID of the thread. This is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the opaque handle which identifies the newly created thread for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all other package commands. The handle of the thread goes out of scope
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-automatically when thread is marked for exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(see the \fBthread::release\fR command below).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional \fBscript\fR argument contains the \fBthread::wait\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command the thread will enter into the event loop. If such command is not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found  in the \fBscript\fR the thread will run the \fBscript\fR to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the end and exit. In that case, the handle may be safely ignored since it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-refers to a thread which does not exists any more at the time when the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command returns.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using flag \fB-joinable\fR it is possible to create a joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, i.e. one upon whose exit can be waited upon by using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::join\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Note that failure to join a thread created with \fB-joinable\fR flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-results in resource and memory leaks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threads created by the \fBthread::create\fR cannot be destroyed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-forcefully. Consequently, there is no corresponding thread destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. A thread may only be released using the \fBthread::release\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and if its internal reference count drops to zero, the thread is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for exit. This kicks the thread out of the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-servicing and the thread continues to execute commands passed in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the \fBscript\fR argument, following the \fBthread::wait\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. If this was the last command in the script, as usualy the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case, the thread will exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It is possible to create a situation in which it may be impossible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to terminate the thread, for example by putting some endless loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the \fBthread::wait\fR or entering the event loop again by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doing an vwait-type of command. In such cases, the thread may never
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit. This is considered to be a bad practice and should be avoided
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if possible. This is best illustrated by the example below:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # You should never do ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        package require Http
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait forever ; # <-- this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The thread created in the above example will never be able to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-After it has been released with the last matching \fBthread::release\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-call, the thread will jump out of the \fBthread::wait\fR and continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to execute commands following. It will enter \fBvwait\fR command and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-wait endlessly for events. There is no way one can terminate such thread,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so you wouldn't want to do this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each newly created has its internal reference counter set to 0 (zero),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. it is unreserved. This counter gets incremented by a call to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::preserve\fR and decremented by a call to \fBthread::release\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. These two commands implement simple but effective thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system and offer predictable and controllable thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-termination capabilities. It is however possible to create initialy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-preserved threads by using flag \fB-preserved\fR of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::create\fR command. Threads created with this flag have the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initial value of the reference counter of 1 (one), and are thus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initially marked reserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::preserve\fR ?id?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command increments the thread reference counter. Each call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command increments the reference counter by one (1).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the increment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread \fBid\fR, the command preserves
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise the current thread is preserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-With reference counting, one can implement controlled access to a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared Tcl thread. By incrementing the reference counter, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-caller signalizes that he/she wishes to use the thread for a longer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-period of time. By decrementing the counter, caller signalizes that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she has finished using the thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::release\fR ?-wait? ?id?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command decrements the thread reference counter. Each call to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this command decrements the reference counter by one (1).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread \fBid\fR, the command releases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise, the current thread is released.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the decrement.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the target thread is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for termination. You should not reference the thread after the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::release\fR command returns zero or negative integer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The handle of the thread goes out of scope and should not be used any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more. Any following reference to the same thread handle will result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional flag \fB-wait\fR instructs the caller thread to wait for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit, if the effect of the command would result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in termination of the target thread, i.e. if the return result would
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be zero (0). Without the flag, the caller thread does not wait for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit. Care must be taken when using the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fB-wait\fR, since this may block the caller thread indefinitely.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This option has been implemented for some special uses of the extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and is deprecated for regular use. Regular users should create joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads by using the \fB-joinable\fR option of the \fBthread::create\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command and the \fBthread::join\fR to wait for thread to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::id\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns the ID of the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::errorproc\fR ?procname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sets a handler for errors that occur in scripts sent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously, using the \fB-async\fR flag of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::send\fR command, to other threads. If no handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is specified, the current handler is returned. The empty string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resets the handler to default (unspecified) value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-An uncaught error in a thread causes an error message to be sent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the standard error channel. This default reporting scheme can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be changed by registering a procedure which is called to report
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the error. The \fIprocname\fR is called in the interpreter that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked the \fBthread::errorproc\fR command. The \fIprocname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is called like this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    myerrorproc thread_id errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::unwind\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with \fBthread::preserve\fR and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::release\fR commands. Support for \fBthread::unwind\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command stops a prior \fBthread::wait\fR command. Execution of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the script passed to newly created thread will continue from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::wait\fR command. If \fBthread::wait\fR was the last command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the script, the thread will exit. The command returns empty result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-but may trigger Tcl error with the message "target thread died" in some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::exit\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with \fBthread::preserve\fR and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::release\fR commands. Support for \fBthread::exit\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command forces a thread stuck in the \fBthread::wait\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command to unconditionaly exit. The execution of \fBthread::exit\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command is guaranteed to leave the program memory in the unconsistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-state, produce memory leaks and otherwise affect other subsytem(s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the Tcl application in an unpredictable manner. The command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returns empty result but may trigger Tcl error with the message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"target thread died" in some situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::names\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of thread IDs. These are only for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads that have been created via \fBthread::create\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If your application creates other threads at the C level, they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are not reported by this command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::exists\fR \fIid\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if thread given by the \fIid\fR parameter exists,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-false (0) otherwise. This applies only for threads that have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-been created via \fBthread::create\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::send\fR ?-async? ?-head? \fIid\fR \fIscript\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a \fIscript\fR to another thread and, optionally,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waits for the result. If the \fB-async\fR flag is specified, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command does not wait for the result and it returns empty string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The target thread must enter it's event loop in order to receive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-scripts sent via this command. This is done by default for threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created without a startup script. Threads can enter the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-explicitly by calling \fBthread::wait\fR or any other relevant Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command, like \fBupdate\fR, \fBvwait\fR, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional \fBvarname\fR specifies name of the variable to store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the result of the \fIscript\fR. Without the \fB-async\fR flag,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command returns the evaluation code, similarily to the standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl \fBcatch\fR command. If, however, the \fB-async\fR flag is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, the command returns immediately and caller can later
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBvwait\fR on ?varname? to get the result of the passed \fIscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t2 [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t1 "set a 1" result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t2 "set b 2" result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for {set i 0} {$i < 2} {incr i} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the above example, two threads were fed work and both of them were
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instructed to signalize the same variable "result" in the calling thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The caller entered the event loop twice to get both results. Note,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-however, that the order of the received results may vary, depending on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the current system load, type of work done, etc, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Many threads can simultaneously send scripts to the target thread for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-execution. All of them are entered into the event queue of the target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and executed on the FIFO basis, intermingled with optional other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events pending in the event queue of the target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using the optional ?-head? switch, scripts posted to the thread's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event queue can be placed on the head, instead on the tail of the queue,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thus being executed in the LIFO fashion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::broadcast\fR \fIid\fR \fIscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a \fIscript\fR to all threads created by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package for execution. It does not wait for response from any of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::wait\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This enters the event loop so a thread can receive messages from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the \fBthread::send\fR command. This command should only be used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-within the script passed to the \fBthread::create\fR. It should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be the very last command in the script. If this is not the case,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the exiting thread will continue executing the script lines pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the \fBthread::wait\fR which is usually not what you want and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Do some initialization work here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait ; # Enter the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::eval\fR ?-lock mutex? \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the mutex protection. If no mutex is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified by using the ?-lock mutex? optional argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the internal static mutex is used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::join\fR \fIid\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for the thread with ID \fIid\fR to exit and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-then returns it's exit code. Errors will be returned for threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-which are not joinable or already waited upon by another thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Upon the join the handle of the thread has gone out of scope and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should not be used any more.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::configure\fR \fIid\fR ?option? ?value? ?...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command configures various low-level aspects of the thread with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ID \fIid\fR in the similar way as the standard Tcl command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBfconfigure\fR configures some Tcl channel options. Options currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-supported are: \fB-eventmark\fR and \fB-unwindonerror\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fB-eventmark\fR option, when set, limits the number of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously posted scripts to the thread event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fBthread::send -async\fR command will block until the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of pending scripts in the event loop does not drop below the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configured with \fB-eventmark\fR. Default value for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fB-eventmark\fR is 0 (zero) which effectively disables the checking,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. allows for unlimited number of posted scripts.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fB-unwindonerror\fR option, when set, causes the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread to unwind if the result of the script processing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in error. Default value for the \fB-unwindonerror\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is 0 (false), i.e. thread continues to process scripts after one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the posted scripts fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::transfer\fR \fIid\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This moves the specified \fIchannel\fR from the current thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and interpreter to the main interpreter of the thread with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-given \fIid\fR. After the move the current interpreter has no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to the channel any more, but the main interpreter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread will be able to use it from now on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command waits until the other thread has incorporated the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel. Because of this it is possible to deadlock the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-participating threads by commanding the other through a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronous \fBthread::send\fR to transfer a channel to us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This easily extends into longer loops of threads waiting for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-each other. Other restrictions: the channel in question must
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-not be shared among multiple interpreters running in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sending thread. This automatically excludes the special channels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for standard input, output and error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal Tcl core implementation and the restriction on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring shared channels, one has to take extra measures when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring socket channels created by accepting the connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-out of the \fBsocket\fR commands callback procedures:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server _Accept 2200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after idle [list Accept $s $ipaddr $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::transfer $tid $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::detach\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This detaches the specified \fIchannel\fR from the current thread and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter. After that, the current interpreter has no access to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel any more. The channel is in the parked state until some other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(or the same) thread attaches the channel again with \fBthread::attach\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Restrictions: same as for transferring shared channels with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::transfer\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::attach\fR \fIchannel\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This attaches the previously detached \fIchannel\fR in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-current thread/interpreter. For already existing channels,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command does nothing, i.e. it is not an error to attach the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-same channel more than once. The first operation will actualy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-perform the operation, while all subsequent operation will just
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do nothing. Command throws error if the \fIchannel\fR cannot be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found in the list of detached channels and/or in the current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Mutexes are most common thread synchronization primitives.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-They are used to synchronize access from two or more threads to one or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more shared resources. This command provides script-level access to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive and/or recursive mutexes. Exclusive mutexes can be locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only once by one thread, while recursive mutexes can be locked many
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-times by the same thread. For recursive mutexes, number of lock and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-unlock operations must match, otherwise, the mutex will never be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-released, which would lead to various deadlock situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Care has to be taken when using mutexes in an multithreading program.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Improper use of mutexes may lead to various deadlock situations,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-especially when using exclusive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fBthread::mutex\fR command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBcreate\fR ?-recursive?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the mutex and returns it's opaque handle. This handle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should be used for any future reference to the newly created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If no optional ?-recursive? argument was specified, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the exclusive mutex. With the ?-recursive? argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command creates a recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBdestroy\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the \fImutex\fR. Mutex should be in unlocked state before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the destroy attempt. If the mutex is locked, the command will throw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the \fImutex\fR. Locking the exclusive mutex may throw Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-error if on attempt to lock the same mutex twice from the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread. If your program logic forces you to lock the same mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-twice or more from the same thread (this may happen in recursive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-procedure invocations) you should consider using the recursive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::mutex\fR \fBunlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the \fImutex\fR so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock the already unlocked mutex will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates many-readers/single-writer mutexes. Reader/writer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutexes allow you to serialize access to a shared resource more optimally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In situations where a shared resource gets mostly read and seldom modified,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-you might gain some performace by using reader/writer mutexes instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive or recursive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For reading the resource, thread should obtain a read lock on the resource.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Read lock is non-exclusive, meaning that more than one thread can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-obtain a read lock to the same resource, without waiting on other readers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For changing the resource, however, a thread must obtain a exclusive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-write lock. This lock effectively blocks all threads from gaining the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-read-lock while the resource is been modified by the writer thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only after the write lock has been released, the resource may be read-locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fBthread::rwmutex\fR command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBcreate\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the reader/writer mutex and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to the newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBdestroy\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the reader/writer \fImutex\fR. If the mutex is already locked,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-attempt to destroy it will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBrlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the \fImutex\fR for reading. More than one thread may read-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same \fImutex\fR at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBwlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the \fImutex\fR for writing. Only one thread may write-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same \fImutex\fR at the same time. Attempt to write-lock same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fImutex\fR twice from the same thread will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::rwmutex\fR \fBunlock\fR \fImutex\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the \fImutex\fR so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock already unlocked \fImutex\fR will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command provides script-level access to condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A condition variable creates a safe environment for the program
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to test some condition, sleep on it when false and be awakened
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-when it might have become true. A condition variable is always
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used in the conjuction with an exclusive mutex. If you attempt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to use other type of mutex in conjuction with the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable, a Tcl error will be thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBcreate\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the condition variable and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBdestroy\fR \fIcond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys condition variable \fIcond\fR. Extreme care has to be taken
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that nobody is using (i.e. waiting on) the condition variable,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-otherwise unexpected errors may happen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBnotify\fR \fIcond\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Wakes up all threads waiting on the condition variable \fIcond\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBthread::cond\fR \fBwait\fR \fIcond\fR \fImutex\fR ?ms?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command is used to suspend program execution until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable \fIcond\fR has been signalled or the optional timer has expired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The exclusive \fImutex\fR must be locked by the calling thread on entrance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command. If the mutex is not locked, Tcl error is thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-While waiting on the \fIcond\fR, the command releases \fImutex\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Before returning to the calling thread, the command re-acquires the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fImutex\fR again. Unlocking the \fImutex\fR and waiting on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-condition variable \fIcond\fR is done atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The \fBms\fR command option, if given, must be an integer specifying
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time interval in milliseconds the command waits to be signalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Otherwise the command waits on condition notify forever.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In multithreading programs, there are many situations where a thread has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to wait for some event to happen until it is allowed to proceed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is usually accomplished by repeatedly testing a condition under the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutex protection and waiting on the condition variable until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluates to true:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set mutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond  [thread::cond  create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {<some_condition_is_true>} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::cond wait $cond $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do some work under mutex protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Repeated testing of the condition is needed since the condition variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may get signalled without the condition being actually changed (spurious
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread wake-ups, for example).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DISCUSSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The fundamental threading model in Tcl is that there can be one or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more Tcl interpreters per thread, but each Tcl interpreter should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only be used by a single thread which created it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A "shared memory" abstraction is awkward to provide in Tcl because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl makes assumptions about variable and data ownership. Therefore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this extension supports a simple form of threading where the main
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread can manage several background, or "worker" threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For example, an event-driven server can pass requests to worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads, and then await responses from worker threads or new client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-requests. Everything goes through the common Tcl event loop, so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-message passing between threads works naturally with event-driven I/O,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBvwait\fR on variables, and so forth. For the transfer of bulk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-information it is possible to move channels between the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For advanced multithreading scripts, script-level access to two
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-basic synchronization primitives, mutex and condition variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is also supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SEE ALSO"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIhttp://www.tcl.tk/doc/howto/thread_model.html\fR, tpool, tsv, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "KEYWORDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events, message passing, mutex, synchronization, thread
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/man/tpool.n b/vendor/thread2.7.3/doc/man/tpool.n
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 221319b30..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/man/tpool.n
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,447 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" Generated from file '' by tcllib/doctools with format 'nroff'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" The definitions below are for supplemental macros used in Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" manual entries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AP type name in/out ?indent?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start paragraph describing an argument to a library procedure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   type is type of argument (int, etc.), in/out is either "in", "out",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   or "in/out" to describe whether procedure reads or modifies arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   and indent is equivalent to second arg of .IP (shouldn't ever be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   needed;  use .AS below instead)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AS ?type? ?name?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Give maximum sizes of arguments for setting tab stops.  Type and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   name are examples of largest possible arguments that will be passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   to .AP later.  If args are omitted, default tab stops are used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start box enclosure.  From here until next .BE, everything will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   enclosed in one large box.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of box enclosure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VS ?version? ?br?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin vertical sidebar, for use in marking newly-changed parts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   of man pages.  The first argument is ignored and used for recording
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the version when the .VS was added, so that the sidebars can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   found and removed when they reach a certain age.  If another argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   is present, then a line break is forced before starting the sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of vertical sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin an indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of list of standard options for a Tk widget.  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   options follow on successive lines, in four columns separated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   by tabs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of list of standard options for a Tk widget.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .OP cmdName dbName dbClass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of description of a specific option.  cmdName gives the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   option's name as specified in the class command, dbName gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's name in the option database, and dbClass gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's class in the option database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .UL arg1 arg2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Print arg1 underlined, then print arg2 normally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .wh -1.3i ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^l \n(.l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ad b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Start an argument description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$4"" .TP \\$4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   ie !"\\$2"" .TP \\n()Cu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   el          .TP 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta \\n()Au \\n()Bu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$3"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP    (\\$3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\".b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$2"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\fI\\$1\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # define tabbing values for .AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )A 10n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )B \\n()Au+15n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )C \\n()Bu+\\w'(in/out)'u+2n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.AS Tcl_Interp Tcl_CreateInterp in/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BS - start boxed text
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^b = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n \l'\\n(.lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BE - end boxed text (draw box now)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n \l'\\n(^lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw four-sided box normally, but don't draw top of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   box if the box started on an earlier page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VS - start vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^Y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^v = 1 (for troff;  for nroff this doesn't matter)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc \s12\(br\s0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el .nr ^v 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VE - end of vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^v 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Special macro to handle page bottom:  finish off current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # box/sidebar if in box/sidebar mode, then invoked standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # page bottom macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw three-sided box if this is the box's first page,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   draw two sides but no top otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^x \\n(^tu+1v-\\n(^Yu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.bp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DS - begin display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DE - end display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SO - start of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "STANDARD OPTIONS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 5.5c 11c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SE - end of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See the \\fBoptions\\fR manual entry for details on the standard options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # OP - start of full description for a single option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de OP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 4c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command-Line Name: \\fB\\$1\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Name:     \\fB\\$2\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Class:    \\fB\\$3\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CS - begin code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta .25i .5i .75i 1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CE - end code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de UL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\\$1\l'|0\(ul'\\$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TH "tpool" n 2.7  "Tcl Threading"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "NAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tpool \-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Part of the Tcl threading extension implementing pools of worker threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SYNOPSIS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBTcl  8.4\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBThread  ?2.7?\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::create\fR ?options?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::names\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::post\fR ?-detached? ?-nowait? \fItpool\fR \fIscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::wait\fR \fItpool\fR \fIjoblist\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::cancel\fR \fItpool\fR \fIjoblist\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::get\fR \fItpool\fR \fIjob\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::preserve\fR \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::release\fR \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DESCRIPTION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates and manages pools of worker threads. It allows you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to post jobs to worker threads and wait for their completion. The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool implementation is Tcl event-loop aware. That means that any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time a caller is forced to wait for an event (job being completed or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a worker thread becoming idle or initialized), the implementation will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-enter the event loop and allow for servicing of other pending file or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-timer (or any other supported) events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::create\fR ?options?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates new threadpool. It accepts several options as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs. Options are used to tune some threadpool parameters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the newly created threadpool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Following options are supported:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--minworkers number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Minimum number of worker threads needed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-During threadpool creation, the implementation will create somany
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads upfront and will keep at least number of them alive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the lifetime of the threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 0 (zero). which means that a newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool will have no worker threads initialy. All worker threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will be started on demand by callers running \fBtpool::post\fR command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and posting jobs to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--maxworkers number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Maximum number of worker threads allowed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If a new job is pending and there are no idle worker threads available,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the implementation will try to create new worker thread. If the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of available worker threads is lower than the given number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-new worker thread will start. The caller will automatically enter the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event loop and wait until the worker thread has initialized. If. however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the number of available worker threads is equal to the given number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the caller will enter the event loop and wait for the first worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to get idle, thus ready to run the job.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 4 (four), which means that the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool instance will allow maximum of 4 worker threads running jobs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or being idle waiting for new jobs to get posted to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--idletime seconds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Time in seconds an idle worker thread waits for the job to get posted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the job queue. If no job arrives during this interval and the time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expires, the worker thread will check the number of currently available
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads and if the number is higher than the number set by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBminthreads\fR option, it will exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If an \fBexitscript\fR has been defined, the exiting worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will first run the script and then exit. Errors from the exit script,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if any, are ignored.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The idle worker thread is not servicing the event loop. If you, however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-put the worker thread into the event loop, by evaluating the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBvwait\fR or other related Tcl commands, the worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will not be in the idle state, hence the idle timer will not be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-taken into account.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--initcmd script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script used to initialize new worker thread. This is usually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to load packages and commands in the worker, set default variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create namespaces, and such. If the passed script runs into a Tcl error,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker will not be created and the initiating command (either the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::create\fR or \fBtpool::post\fR) will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, hence, the Tcl interpreter of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker thread will contain just the initial set of Tcl commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--exitcmd script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script run when the idle worker thread exits. This is normaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to cleanup the state of the worker thread, release reserved resources,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cleanup memory and such.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, thus no Tcl script will run
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-on the worker thread exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::names\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of IDs of threadpools created with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::create\fR command. If no threadpools were found, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return empty list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::post\fR ?-detached? ?-nowait? \fItpool\fR \fIscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sends a \fIscript\fR to the target \fItpool\fR threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for execution. The script will be executed in the first available idle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker thread. If there are no idle worker threads available, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will create new one, enter the event loop and service events until the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-newly created thread is initialized. If the current number of worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads is equal to the maximum number of worker threads, as defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the threadpool creation, the command will enter the event loop and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-service events while waiting for one of the worker threads to become idle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional ?-nowait? argument is given, the command will not wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for one idle worker. It will just place the job in the pool's job queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and return immediately.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the posted job. This ID is used for subsequent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::wait\fR, \fBtpool::get\fR and \fBtpool::cancel\fR commands to wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for and retrieve result of the posted script, or cancel the posted job
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-respectively. If the optional ?-detached? argument is specified, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will post a detached job. A detached job can not be cancelled or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waited upon and is not identified by the job ID.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the threadpool \fItpool\fR is not found in the list of active
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread pools, the command will throw error. The error will also be triggered
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if the newly created worker thread fails to initialize.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::wait\fR \fItpool\fR \fIjoblist\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for one or many jobs, whose job IDs are given in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIjoblist\fR to get processed by the worker thread(s). If none of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified jobs are ready, the command will enter the event loop, service
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events and wait for the first job to get ready.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of completed job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-?varname? is given, it will be set to the list of jobs in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIjoblist\fR which are still pending. If the threadpool \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::cancel\fR \fItpool\fR \fIjoblist\fR ?varname?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command cancels the previously posted jobs given by the \fIjoblist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the pool \fItpool\fR. Job cancellation succeeds only for job still
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waiting to be processed. If the job is already being executed by one of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker threads, the job will not be cancelled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of cancelled job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-?varname? is given, it will be set to the list of jobs in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIjoblist\fR which were not cancelled. If the threadpool \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::get\fR \fItpool\fR \fIjob\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command retrieves the result of the previously posted \fIjob\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only results of jobs waited upon with the \fBtpool::wait\fR command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be retrieved. If the execution of the script resulted in error,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command will throw the error and update the \fBerrorInfo\fR and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBerrorCode\fR variables correspondingly. If the pool \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of threadpools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the job \fIjob\fR is not ready for retrieval, because it is currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-being executed by the worker thread, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::preserve\fR \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command increments the reference counter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool \fItpool\fR by one (1). Command returns the value of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the increment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-By incrementing the reference counter, the caller signalizes that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she wishes to use the resource for a longer period of time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtpool::release\fR \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command decrements the reference counter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool \fItpool\fR by one (1).Command returns the value of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the decrement.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the threadpool \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is marked for termination. You should not reference the threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the \fBtpool::release\fR command returns zero. The \fItpool\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-handle goes out of scope and should not be used any more. Any following
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference to the same threadpool handle will result in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DISCUSSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threadpool is one of the most common threading paradigm when it comes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to server applications handling a large number of relatively small tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A very simplistic model for building a server application would be to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create a new thread each time a request arrives and service the request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the new thread. One of the disadvantages of this approach is that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the overhead of creating a new thread for each request is significant;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a server that created a new thread for each request would spend more time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and consume more system resources in creating and destroying threads than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in processing actual user requests. In addition to the overhead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creating and destroying threads, active threads consume system resources.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creating too many threads can cause the system to run out of memory or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trash due to excessive memory consumption.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread pool offers a solution to both the problem of thread life-cycle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-overhead and the problem of resource trashing. By reusing threads for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-multiple tasks, the thread-creation overhead is spread over many tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As a bonus, because the thread already exists when a request arrives,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the delay introduced by thread creation is eliminated. Thus, the request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be serviced immediately. Furthermore, by properly tuning the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of threads in the thread pool, resource thrashing may also be eliminated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-by forcing any request to wait until a thread is available to process it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SEE ALSO"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tsv, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "KEYWORDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, threadpool
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/man/tsv.n b/vendor/thread2.7.3/doc/man/tsv.n
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 09a5bb384..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/man/tsv.n
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,579 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" Generated from file '' by tcllib/doctools with format 'nroff'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" The definitions below are for supplemental macros used in Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" manual entries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AP type name in/out ?indent?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start paragraph describing an argument to a library procedure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   type is type of argument (int, etc.), in/out is either "in", "out",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   or "in/out" to describe whether procedure reads or modifies arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   and indent is equivalent to second arg of .IP (shouldn't ever be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   needed;  use .AS below instead)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AS ?type? ?name?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Give maximum sizes of arguments for setting tab stops.  Type and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   name are examples of largest possible arguments that will be passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   to .AP later.  If args are omitted, default tab stops are used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start box enclosure.  From here until next .BE, everything will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   enclosed in one large box.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of box enclosure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VS ?version? ?br?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin vertical sidebar, for use in marking newly-changed parts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   of man pages.  The first argument is ignored and used for recording
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the version when the .VS was added, so that the sidebars can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   found and removed when they reach a certain age.  If another argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   is present, then a line break is forced before starting the sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of vertical sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin an indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of list of standard options for a Tk widget.  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   options follow on successive lines, in four columns separated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   by tabs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of list of standard options for a Tk widget.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .OP cmdName dbName dbClass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of description of a specific option.  cmdName gives the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   option's name as specified in the class command, dbName gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's name in the option database, and dbClass gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's class in the option database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .UL arg1 arg2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Print arg1 underlined, then print arg2 normally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .wh -1.3i ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^l \n(.l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ad b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Start an argument description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$4"" .TP \\$4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   ie !"\\$2"" .TP \\n()Cu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   el          .TP 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta \\n()Au \\n()Bu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$3"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP    (\\$3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\".b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$2"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\fI\\$1\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # define tabbing values for .AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )A 10n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )B \\n()Au+15n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )C \\n()Bu+\\w'(in/out)'u+2n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.AS Tcl_Interp Tcl_CreateInterp in/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BS - start boxed text
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^b = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n \l'\\n(.lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BE - end boxed text (draw box now)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n \l'\\n(^lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw four-sided box normally, but don't draw top of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   box if the box started on an earlier page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VS - start vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^Y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^v = 1 (for troff;  for nroff this doesn't matter)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc \s12\(br\s0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el .nr ^v 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VE - end of vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^v 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Special macro to handle page bottom:  finish off current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # box/sidebar if in box/sidebar mode, then invoked standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # page bottom macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw three-sided box if this is the box's first page,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   draw two sides but no top otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^x \\n(^tu+1v-\\n(^Yu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.bp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DS - begin display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DE - end display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SO - start of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "STANDARD OPTIONS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 5.5c 11c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SE - end of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See the \\fBoptions\\fR manual entry for details on the standard options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # OP - start of full description for a single option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de OP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 4c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command-Line Name: \\fB\\$1\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Name:     \\fB\\$2\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Class:    \\fB\\$3\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CS - begin code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta .25i .5i .75i 1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CE - end code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de UL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\\$1\l'|0\(ul'\\$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TH "tsv" n 2.7  "Tcl Threading"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "NAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tsv \-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Part of the Tcl threading extension allowing script level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-manipulation of data shared between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SYNOPSIS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBTcl  8.4\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBThread  ?2.7?\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::names\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::object\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::set\fR \fIvarname\fR \fIelement\fR ?value?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::get\fR \fIvarname\fR \fIelement\fR ?namedvar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::unset\fR \fIvarname\fR ?element?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::exists\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::pop\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::move\fR \fIvarname\fR \fIoldname\fR \fInewname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::incr\fR \fIvarname\fR \fIelement\fR ?count?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::append\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lock\fR \fIvarname\fR \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lappend\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::linsert\fR \fIvarname\fR \fIelement\fR \fIindex\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lreplace\fR \fIvarname\fR \fIelement\fR \fIfirst\fR \fIlast\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::llength\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lindex\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lrange\fR \fIvarname\fR \fIelement\fR \fIfrom\fR \fIto\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lsearch\fR \fIvarname\fR \fIelement\fR ?options? \fIpattern\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lset\fR \fIvarname\fR \fIelement\fR \fIindex\fR ?index ...? \fIvalue\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lpop\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lpush\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array set\fR \fIvarname\fR \fIlist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array get\fR \fIvarname\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array names\fR \fIvarname\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array size\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array reset\fR \fIvarname\fR \fIlist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array bind\fR \fIvarname\fR \fIhandle\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array unbind\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array isbound\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keyldel\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylget\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR ?retvar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylkeys\fR \fIvarname\fR \fIkeylist\fR ?key?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylset\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR \fIvalue\fR ?key value..?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DESCRIPTION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands implementing thread shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread shared variable is very similar to a Tcl array but in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-contrast to a Tcl array it is created in shared memory and can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be accessed from many threads at the same time. Important feature of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread shared variable is that each access to the variable is internaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-protected by a mutex so script programmer does not have to take care
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about locking the variable himself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are not bound to any thread explicitly. That
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-means that when a thread which created any of thread shared variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exits, the variable and associated memory is not unset/reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-User has to explicitly unset the variable to reclaim the memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-consumed by the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "ELEMENT COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::names\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of shared variables matching optional ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or all known variables if pattern is ommited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::object\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates object accessor command for the \fIelement\fR in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable \fIvarname\fR. Using this command, one can apply most
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the other shared variable commands as method functions of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the element object command. The object command is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted when the element which this command is pointing to is unset.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::set foo bar "A shared string"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set string [tsv::object foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % $string append " appended"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    => A shared string appended
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::set\fR \fIvarname\fR \fIelement\fR ?value?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets the value of the \fIelement\fR in the shared variable \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to \fIvalue\fR and returns the value to caller. The \fIvalue\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may be ommited, in which case the command will return the current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-value of the element. If the element cannot be found, error is triggered.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::get\fR \fIvarname\fR \fIelement\fR ?namedvar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Retrieves the value of the \fIelement\fR from the shared variable \fIvarname\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional argument \fInamedvar\fR is given, the value is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stored in the named variable. Return value of the command depends
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the existence of the optional argument \fInamedvar\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the argument is ommited and the requested element cannot be found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared array, the command triggers error. If, however, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional argument is given on the command line, the command returns
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-true (1) if the element is found or false (0) if the element is not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::unset\fR \fIvarname\fR ?element?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unsets the \fIelement\fR from the shared variable \fIvarname\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional element is not given, it deletes the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::exists\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Checks wether the \fIelement\fR exists in the shared variable \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and returns true (1) if it does or false (0) if it doesn't.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::pop\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns value of the \fIelement\fR in the shared variable \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and unsets the element, all in one atomic operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::move\fR \fIvarname\fR \fIoldname\fR \fInewname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Renames the element \fIoldname\fR to the \fInewname\fR in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable \fIvarname\fR. This effectively performs an get/unset/set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sequence of operations but all in one atomic step.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::incr\fR \fIvarname\fR \fIelement\fR ?count?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBincr\fR command but increments the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the \fIelement\fR in shared variaboe \fIvarname\fR instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::append\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBappend\fR command but appends one or more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values to the \fIelement\fR in shared variable \fIvarname\fR instead of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lock\fR \fIvarname\fR \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the internal mutex protection. During the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script evaluation, the entire shared variable is locked. For shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable commands within the script, internal locking is disabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so no deadlock can occur. It is also allowed to unset the shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable from within the script. The shared variable is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created if it did not exists at the time of the first lock operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::lock foo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts stderr [tsv::set foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::unset foo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "LIST COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Those command are similar to the equivalently named Tcl command. The difference
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is that they operate on elements of shared arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lappend\fR \fIvarname\fR \fIelement\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlappend\fR command but appends one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values to the \fIelement\fR in shared variable \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::linsert\fR \fIvarname\fR \fIelement\fR \fIindex\fR \fIvalue\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlinsert\fR command but inserts one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values at the \fIindex\fR list position in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lreplace\fR \fIvarname\fR \fIelement\fR \fIfirst\fR \fIlast\fR ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlreplace\fR command but replaces one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values between the \fIfirst\fR and \fIlast\fR position
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the \fIelement\fR of the shared variable \fIvarname\fR instead of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::llength\fR \fIvarname\fR \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBllength\fR command but returns length
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the \fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lindex\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlindex\fR command but returns the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the \fIindex\fR list position of the \fIelement\fR from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the shared variable \fIvarname\fR instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lrange\fR \fIvarname\fR \fIelement\fR \fIfrom\fR \fIto\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlrange\fR command but returns values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-between \fIfrom\fR and \fIto\fR list positions from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIelement\fR in the shared variable \fIvarname\fR instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lsearch\fR \fIvarname\fR \fIelement\fR ?options? \fIpattern\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlsearch\fR command but searches the \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable \fIvarname\fR instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lset\fR \fIvarname\fR \fIelement\fR \fIindex\fR ?index ...? \fIvalue\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl \fBlset\fR command but sets the \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable \fIvarname\fR instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lpop\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to the standard Tcl \fBlindex\fR command but in addition to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returning, it also splices the value out of the \fIelement\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from the shared variable \fIvarname\fR in one atomic operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In contrast to the Tcl \fBlindex\fR command, this command returns
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::lpush\fR \fIvarname\fR \fIelement\fR ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command performes the opposite of the \fBtsv::lpop\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As its counterpart, it returns no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "ARRAY COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command supports most of the options of the standard Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBarray\fR command. In addition to those, it allows binding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a shared variable to some persisten storage databases. Currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the only persistent option supported is the famous GNU Gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database. This option has to be selected during the package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compilation time. The implementation provides hooks for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-defining other persistency layers, if needed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array set\fR \fIvarname\fR \fIlist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl \fBarray set\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array get\fR \fIvarname\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl \fBarray get\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array names\fR \fIvarname\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl \fBarray names\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array size\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl \fBarray size\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array reset\fR \fIvarname\fR \fIlist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl \fBarray set\fR but it clears
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the \fIvarname\fR and sets new values from the list atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array bind\fR \fIvarname\fR \fIhandle\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Binds the \fIvarname\fR to the persistent storage \fIhandle\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The format of the \fIhandle\fR is <handler>:<address>. For the built-in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GNU Gdbm persistence layer, the format of the handle is "gdbm:<path>"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-where <path> is the path to the Gdbm database file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array unbind\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unbinds the shared \fIarray\fR from its bound persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::array isbound\fR \fIvarname\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if the shared \fIvarname\fR is bound to some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-persistent storage or zero (0) if not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "KEYED LIST COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Keyed list commands are borrowed from the TclX package. Keyed lists provide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a structured data type built upon standard Tcl lists. This is a functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-similar to structs in the C programming language.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A keyed list is a list in which each element contains a key and value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pair. These element pairs are stored as lists themselves, where the key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is the first element of the list, and the value is the second. The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs are referred to as fields.  This is an example of a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-keyed list:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {{NAME  {Frank  Zappa}} {JOB {musician and composer}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Fields may contain subfields; `.' is the separator character. Subfields
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are actually fields  where the value is another keyed list. Thus the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following list has the top level fields ID and NAME, and subfields
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NAME.FIRST and NAME.LAST:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {ID 106} {NAME {{FIRST Frank} {LAST Zappa}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-There is no limit to the recursive depth of subfields,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-allowing one to build complex data structures. Keyed lists are constructed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and accessed via a number of commands. All  keyed  list management
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands take the name of the variable containing the keyed list as an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-argument (i.e. passed by reference), rather than passing the list directly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keyldel\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Delete the field specified by \fIkey\fR from the keyed list \fIkeylist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable \fIvarname\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This removes both the key and the value from the keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylget\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR ?retvar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return the value associated with \fIkey\fR from the keyed list \fIkeylist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable \fIvarname\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional \fIretvar\fR is not specified, then the value will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returned as the result of the command. In this case, if key is not found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the list, an error will result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If \fIretvar\fR is specified and \fIkey\fR is in the list, then the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is returned in the variable \fIretvar\fR and the command returns 1 if the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key was present within the list. If \fIkey\fR isn't in the list, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return 0, and \fIretvar\fR will be left unchanged. If {} is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified for \fIretvar\fR, the value is not returned, allowing the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-programmer to determine if a \fIkey\fR is present in a keyed list without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-setting a variable as a side-effect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylkeys\fR \fIvarname\fR \fIkeylist\fR ?key?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return  the a list of the keys in the keyed list \fIkeylist\fR in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable \fIvarname\fR. If \fIkey\fR is specified, then it is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the name of a key field who's subfield keys are to be retrieved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBtsv::keylset\fR \fIvarname\fR \fIkeylist\fR \fIkey\fR \fIvalue\fR ?key value..?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Set the value associated with \fIkey\fR, in the keyed list \fIkeylist\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to \fIvalue\fR. If the \fIkeylist\fR does not exists, it is created.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If \fIkey\fR is not currently in the list, it will be added. If it already
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exists, \fIvalue\fR replaces the existing value. Multiple keywords and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values may be specified, if desired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DISCUSSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The current implementation of thread shared variables allows for easy and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-convenient access to data shared between different threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Internally, the data is stored in Tcl objects and all package commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-operate on internal data representation, thus minimizing shimmering and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-improving performance. Special care has been taken to assure that all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-object data is properly locked and deep-copied when moving objects between
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal design of the Tcl core, there is no provision of full
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-integration of shared variables within the Tcl syntax, unfortunately. All
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to shared data must be performed with the supplied package commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Also, variable traces are not supported. But even so, benefits of easy,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simple and safe shared data manipulation outweights imposed limitations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "CREDITS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are inspired by the nsv interface found in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AOLserver, a highly scalable Web server from America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SEE ALSO"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tpool, ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "KEYWORDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-locking, synchronization, thread shared data, threads
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/man/ttrace.n b/vendor/thread2.7.3/doc/man/ttrace.n
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 5ef5af45c..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/man/ttrace.n
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,472 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" Generated from file '' by tcllib/doctools with format 'nroff'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" -*- tcl -*- doctools manpage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" The definitions below are for supplemental macros used in Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" manual entries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AP type name in/out ?indent?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start paragraph describing an argument to a library procedure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   type is type of argument (int, etc.), in/out is either "in", "out",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   or "in/out" to describe whether procedure reads or modifies arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   and indent is equivalent to second arg of .IP (shouldn't ever be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   needed;  use .AS below instead)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .AS ?type? ?name?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Give maximum sizes of arguments for setting tab stops.  Type and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   name are examples of largest possible arguments that will be passed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   to .AP later.  If args are omitted, default tab stops are used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start box enclosure.  From here until next .BE, everything will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   enclosed in one large box.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of box enclosure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End code excerpt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VS ?version? ?br?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin vertical sidebar, for use in marking newly-changed parts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   of man pages.  The first argument is ignored and used for recording
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the version when the .VS was added, so that the sidebars can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   found and removed when they reach a certain age.  If another argument
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   is present, then a line break is forced before starting the sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of vertical sidebar.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Begin an indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of indented unfilled display.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of list of standard options for a Tk widget.  The
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   options follow on successive lines, in four columns separated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   by tabs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   End of list of standard options for a Tk widget.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .OP cmdName dbName dbClass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Start of description of a specific option.  cmdName gives the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   option's name as specified in the class command, dbName gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's name in the option database, and dbClass gives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   the option's class in the option database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\" .UL arg1 arg2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   Print arg1 underlined, then print arg2 normally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .wh -1.3i ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^l \n(.l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ad b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Start an argument description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$4"" .TP \\$4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   ie !"\\$2"" .TP \\n()Cu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.   el          .TP 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta \\n()Au \\n()Bu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$3"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP    (\\$3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\".b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !"\\$2"" \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\$1 \\fI\\$2\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\&\\fI\\$1\\fP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # define tabbing values for .AP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de AS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )A 10n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )B \\n()Au+15n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr )C \\n()Bu+\\w'(in/out)'u+2n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.AS Tcl_Interp Tcl_CreateInterp in/out
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BS - start boxed text
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^b = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n \l'\\n(.lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if n .fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # BE - end boxed text (draw box now)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n \l'\\n(^lu\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw four-sided box normally, but don't draw top of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   box if the box started on an earlier page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VS - start vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^Y = starting y location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # ^v = 1 (for troff;  for nroff this doesn't matter)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if !"\\$2"" .br
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc \s12\(br\s0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el .nr ^v 1u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # VE - end of vertical sidebar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de VE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie n 'mc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^v 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # Special macro to handle page bottom:  finish off current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # box/sidebar if in box/sidebar mode, then invoked standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # page bottom macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de ^B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'ti 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   Draw three-sided box if this is the box's first page,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\"   draw two sides but no top otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^x \\n(^tu+1v-\\n(^Yu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.bp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ev
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^b \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nr ^b 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if \\n(^v \{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.mk ^Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.\}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DS - begin display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # DE - end display
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de DE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SO - start of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "STANDARD OPTIONS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 5.5c 11c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft B
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # SE - end of list of standard options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de SE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-See the \\fBoptions\\fR manual entry for details on the standard options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # OP - start of full description for a single option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de OP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.LP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta 4c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command-Line Name: \\fB\\$1\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Name:     \\fB\\$2\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Database Class:    \\fB\\$3\\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.IP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CS - begin code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.ta .25i .5i .75i 1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'\"   # CE - end code excerpt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.if t .ft R
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.RE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.de UL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\\$1\l'|0\(ul'\\$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TH "ttrace" n 2.7  "Tcl Threading"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "NAME"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ttrace \- Trace-based interpreter initialization
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SYNOPSIS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBTcl  8.4\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require \fBThread  ?2.7?\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::eval\fR \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::enable\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::disable\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::cleanup\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::update\fR ?epoch?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::atenable\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::atdisable\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addtrace\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addscript\fR \fIname\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addresolver\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addcleanup\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addentry\fR \fIcmd\fR \fIvar\fR \fIval\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getentry\fR \fIcmd\fR \fIvar\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getentries\fR \fIcmd\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::delentry\fR \fIcmd\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::preload\fR \fIcmd\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DESCRIPTION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates a framework for on-demand replication of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter state accross threads in an multithreading application.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It relies on the mechanics of Tcl command tracing and the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBunknown\fR command and mechanism.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The package requires Tcl threading extension but can be alternatively
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used stand-alone within the AOLserver, a scalable webserver from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In a nutshell, a short sample illustrating the usage of the ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with the Tcl threading extension:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.nf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % package require Ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    2.7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t1 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % ttrace::eval {proc test args {return test-[thread::id]}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t1 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t2 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t2 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As seen from above, the \fBttrace::eval\fR and \fBttrace::update\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands are used to create a thread-wide definition of a simple
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl procedure and replicate that definition to all, already existing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or later created, threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "USER COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes user-level commands. Those commands can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used by script writers to control the execution of the tracing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::eval\fR \fIarg\fR ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates given arguments and evaluates the resulting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl command with trace framework enabled. If the command execution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-was ok, it takes necessary steps to automatically propagate the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace epoch change to all threads in the application.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For AOLserver, only newly created threads actually receive the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-epoch change. For the Tcl threading extension, all threads created by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the extension are automatically updated. If the command execution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in Tcl error, no state propagation takes place.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.sp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is the most important user-level command of the package as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-it wraps most of the commands described below. This greatly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simplifies things, because user need to learn just this (one)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command in order to effectively use the package. Other commands,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as desribed below, are included mostly for the sake of completeness.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::enable\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Activates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and starts a new trace epoch. The trace epoch encapsulates all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes done to the interpreter during the time traces are activated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::disable\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deactivates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and closes the current trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::cleanup\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to clean-up all on-demand loaded resources in the interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It effectively brings Tcl interpreter to its pristine state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::update\fR ?epoch?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to refresh the state of the interpreter to match the optional
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace ?epoch?. If the optional ?epoch? is not given, it takes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the most recent trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getscript\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns a synthetized Tcl script which may be sourced in any interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This script sets the stage for the Tcl \fBunknown\fR command so it can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-load traced resources from the in-memory database. Normally, this command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is automatically invoked by other higher-level commands like
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::eval\fR and \fBttrace::update\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "CALLBACK COMMANDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A word upfront: the package already includes callbacks for tracing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following Tcl commands: \fBproc\fR, \fBnamespace\fR, \fBvariable\fR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBload\fR, and \fBrename\fR. Additionaly, a set of callbacks for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tracing resources (object, clasess) for the XOTcl v1.3.8+, an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OO-extension to Tcl, is also provided.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This gives a solid base for solving most of the real-life needs and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-serves as an example for people wanting to customize the package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to cover their specific needs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Below, you can find commands for registering callbacks in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework and for writing callback scripts. These callbacks are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked by the framework in order to gather interpreter state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes, build in-memory database, perform custom-cleanups and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-various other tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::atenable\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at \fBttrace::enable\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, \fIcmd\fR, a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, \fIarglist\fR and the \fIbody\fR of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl \fBproc\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::atdisable\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at \fBttrace::disable\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, \fIcmd\fR, a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, \fIarglist\fR and the \fIbody\fR of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl \fBproc\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addtrace\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for tracing the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBcmd\fR command. The callback definition includes the name of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl command to trace, \fIcmd\fR, a list of callback arguments,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIarglist\fR and the \fIbody\fR of the callback. Effectively,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this actually resembles the call interface of the standard Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBproc\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addscript\fR \fIname\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for building a Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to be passed to other interpreters. This script is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to set the stage for the Tcl \fBunknown\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The callback definition includes the name of the callback,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fIname\fR and the \fIbody\fR of the callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addresolver\fR \fIcmd\fR \fIarglist\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the overloaded Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBunknown\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This callback is used to resolve the resource and load the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource in the current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addcleanup\fR \fIbody\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the \fBtrace::cleanup\fR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::addentry\fR \fIcmd\fR \fIvar\fR \fIval\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Adds one entry to the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getentry\fR \fIcmd\fR \fIvar\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns the value of the entry from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::getentries\fR \fIcmd\fR ?pattern?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of all entries from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::delentry\fR \fIcmd\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deletes an entry from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.TP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBttrace::preload\fR \fIcmd\fR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers the Tcl command to be loaded in the interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Commands registered this way will always be the part of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the interpreter and not be on-demand loaded by the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBunknown\fR command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "DISCUSSION"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Common introspective state-replication approaches use a custom Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to introspect the running interpreter and synthesize another
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl script to replicate this state in some other interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package, on the contrary, uses Tcl command traces. Command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-traces are registered on selected Tcl commands, like \fBproc\fR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-\fBnamespace\fR, \fBload\fR and other standard (and/or user-defined)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl commands. When activated, those traces build an in-memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database of created resources. This database is used as a resource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-repository for the (overloaded) Tcl \fBunknown\fR command which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the requested resource in the interpreter on demand.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This way, users can update just one interpreter (master) in one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and replicate that interpreter state (or part of it) to other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads/interpreters in the process.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Immediate benefit of such approach is the much smaller memory footprint
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the application and much faster thread creation. By not actually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-loading all necessary procedures (and other resources) in every thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the thread initialization time, but by deffering this to the time the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource is actually referenced, significant improvements in both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-memory consumption and thread initialization time can be achieved. Some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tests have shown that memory footprint of an multithreading Tcl application
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-went down more than three times and thread startup time was reduced for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about 50 times. Note that your mileage may vary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Other benefits include much finer control about what (and when) gets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-replicated from the master to other Tcl thread/interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "SEE ALSO"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, tpool, tsv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SH "KEYWORDS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command tracing, introspection
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/thread.man b/vendor/thread2.7.3/doc/thread.man
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index bc66da9a6..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/thread.man
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,610 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[comment {-*- tcl -*- doctools manpage}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_begin thread n 2.7]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[moddesc {Tcl Threading}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[titledesc {Extension for script access to Tcl threading}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Tcl 8.4]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Thread [opt 2.7]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[description]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [package thread] extension creates threads that contain Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreters, and it lets you send scripts to those threads for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Additionaly, it provides script-level access to basic thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronization primitives, like mutexes and condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section COMMANDS]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands for creating and destroying threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and sending scripts to threads for evaluation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::create] [opt -joinable] [opt -preserved] [opt script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates a thread that contains a Tcl interpreter. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The Tcl interpreter either evaluates the optional [option script], if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, or it waits in the event loop for scripts that arrive via
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the [cmd thread::send] command. The result, if any, of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional [option script] is never returned to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The result of [cmd thread::create] is the ID of the thread. This is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the opaque handle which identifies the newly created thread for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all other package commands. The handle of the thread goes out of scope
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-automatically when thread is marked for exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(see the [cmd thread::release] command below).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional [option script] argument contains the [cmd thread::wait]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command the thread will enter into the event loop. If such command is not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found  in the [option script] the thread will run the [option script] to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the end and exit. In that case, the handle may be safely ignored since it 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-refers to a thread which does not exists any more at the time when the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command returns.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using flag [option -joinable] it is possible to create a joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread, i.e. one upon whose exit can be waited upon by using 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::join] command. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Note that failure to join a thread created with [option -joinable] flag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-results in resource and memory leaks. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threads created by the [cmd thread::create] cannot be destroyed 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-forcefully. Consequently, there is no corresponding thread destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. A thread may only be released using the [cmd thread::release] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and if its internal reference count drops to zero, the thread is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for exit. This kicks the thread out of the event loop 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-servicing and the thread continues to execute commands passed in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the [option script] argument, following the [cmd thread::wait]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. If this was the last command in the script, as usualy the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-case, the thread will exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It is possible to create a situation in which it may be impossible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to terminate the thread, for example by putting some endless loop 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the [cmd thread::wait] or entering the event loop again by 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doing an vwait-type of command. In such cases, the thread may never
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exit. This is considered to be a bad practice and should be avoided 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if possible. This is best illustrated by the example below:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # You should never do ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        package require Http
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait forever ; # <-- this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The thread created in the above example will never be able to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-After it has been released with the last matching [cmd thread::release]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-call, the thread will jump out of the [cmd thread::wait] and continue 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to execute commands following. It will enter [cmd vwait] command and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-wait endlessly for events. There is no way one can terminate such thread,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so you wouldn't want to do this!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each newly created has its internal reference counter set to 0 (zero), 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. it is unreserved. This counter gets incremented by a call to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::preserve] and decremented by a call to [cmd thread::release]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command. These two commands implement simple but effective thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system and offer predictable and controllable thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-termination capabilities. It is however possible to create initialy 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-preserved threads by using flag [option -preserved] of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::create] command. Threads created with this flag have the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initial value of the reference counter of 1 (one), and are thus 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initially marked reserved. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::preserve] [opt id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command increments the thread reference counter. Each call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command increments the reference counter by one (1). 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the increment. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread [option id], the command preserves
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise the current thread is preserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-With reference counting, one can implement controlled access to a 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared Tcl thread. By incrementing the reference counter, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-caller signalizes that he/she wishes to use the thread for a longer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-period of time. By decrementing the counter, caller signalizes that 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she has finished using the thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::release] [opt -wait] [opt id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command decrements the thread reference counter. Each call to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this command decrements the reference counter by one (1). 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If called with the optional thread [option id], the command releases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the given thread. Otherwise, the current thread is released.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Command returns the value of the reference counter after the decrement.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the target thread is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-marked for termination. You should not reference the thread after the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::release] command returns zero or negative integer. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The handle of the thread goes out of scope and should not be used any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more. Any following reference to the same thread handle will result 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional flag [option -wait] instructs the caller thread to wait for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit, if the effect of the command would result 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in termination of the target thread, i.e. if the return result would
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be zero (0). Without the flag, the caller thread does not wait for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the target thread to exit. Care must be taken when using the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[option -wait], since this may block the caller thread indefinitely.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This option has been implemented for some special uses of the extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and is deprecated for regular use. Regular users should create joinable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads by using the [option -joinable] option of the [cmd thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command and the [cmd thread::join] to wait for thread to exit. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns the ID of the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::errorproc] [opt procname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sets a handler for errors that occur in scripts sent 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously, using the [option -async] flag of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::send] command, to other threads. If no handler 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is specified, the current handler is returned. The empty string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resets the handler to default (unspecified) value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-An uncaught error in a thread causes an error message to be sent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the standard error channel. This default reporting scheme can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be changed by registering a procedure which is called to report
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the error. The [arg procname] is called in the interpreter that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked the [cmd thread::errorproc] command. The [arg procname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is called like this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    myerrorproc thread_id errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cancel] [opt -unwind] [arg id] [opt result]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command requires Tcl version 8.6 or higher.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Cancels the script being evaluated in the thread given by the [arg id]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-parameter. Without the [option -unwind] switch the evaluation stack for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the interpreter is unwound until an enclosing catch command is found or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-there are no further invocations of the interpreter left on the call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stack. With the [option -unwind] switch the evaluation stack for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter is unwound without regard to any intervening catch command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-until there are no further invocations of the interpreter left on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-call stack. If [arg result] is present, it will be used as the error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-message string; otherwise, a default error message string will be used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::unwind]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with [cmd thread::preserve] and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::release] commands. Support for [cmd thread::unwind] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command stops a prior [cmd thread::wait] command. Execution of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the script passed to newly created thread will continue from the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::wait] command. If [cmd thread::wait] was the last command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the script, the thread will exit. The command returns empty result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-but may trigger Tcl error with the message "target thread died" in some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::exit]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Use of this command is deprecated in favour of more advanced thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reservation system implemented with [cmd thread::preserve] and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::release] commands. Support for [cmd thread::exit] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will dissapear in some future major release of the extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command forces a thread stuck in the [cmd thread::wait]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command to unconditionaly exit. The execution of [cmd thread::exit]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command is guaranteed to leave the program memory in the unconsistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-state, produce memory leaks and otherwise affect other subsytem(s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the Tcl application in an unpredictable manner. The command 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returns empty result but may trigger Tcl error with the message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"target thread died" in some situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of thread IDs. These are only for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads that have been created via [cmd thread::create] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If your application creates other threads at the C level, they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are not reported by this command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::exists] [arg id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if thread given by the [arg id] parameter exists, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-false (0) otherwise. This applies only for threads that have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-been created via [cmd thread::create] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::send] [opt -async] [opt -head] [arg id] [arg script] [opt varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a [arg script] to another thread and, optionally,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waits for the result. If the [option -async] flag is specified, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command does not wait for the result and it returns empty string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The target thread must enter it's event loop in order to receive 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-scripts sent via this command. This is done by default for threads 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created without a startup script. Threads can enter the event loop 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-explicitly by calling [cmd thread::wait] or any other relevant Tcl/Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command, like [cmd update], [cmd vwait], etc. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Optional [option varname] specifies name of the variable to store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the result of the [arg script]. Without the [option -async] flag,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command returns the evaluation code, similarily to the standard 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl [cmd catch] command. If, however, the [option -async] flag is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified, the command returns immediately and caller can later 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd vwait] on [opt varname] to get the result of the passed [arg script]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t2 [thread::create] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t1 "set a 1" result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $t2 "set b 2" result 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for {set i 0} {$i < 2} {incr i} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vwait result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the above example, two threads were fed work and both of them were
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instructed to signalize the same variable "result" in the calling thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The caller entered the event loop twice to get both results. Note, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-however, that the order of the received results may vary, depending on 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the current system load, type of work done, etc, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Many threads can simultaneously send scripts to the target thread for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-execution. All of them are entered into the event queue of the target 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and executed on the FIFO basis, intermingled with optional other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events pending in the event queue of the target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Using the optional [opt -head] switch, scripts posted to the thread's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event queue can be placed on the head, instead on the tail of the queue,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thus being executed in the LIFO fashion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::broadcast] [arg id] [arg script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command passes a [arg script] to all threads created by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package for execution. It does not wait for response from any of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::wait]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This enters the event loop so a thread can receive messages from 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the [cmd thread::send] command. This command should only be used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-within the script passed to the [cmd thread::create]. It should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be the very last command in the script. If this is not the case,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the exiting thread will continue executing the script lines past
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the [cmd thread::wait] which is usually not what you want and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [thread::create {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Do some initialization work here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::wait ; # Enter the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::eval] [opt {-lock mutex}] [arg arg] [opt {arg ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the mutex protection. If no mutex is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified by using the [opt {-lock mutex}] optional argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the internal static mutex is used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::join] [arg id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for the thread with ID [arg id] to exit and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-then returns it's exit code. Errors will be returned for threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-which are not joinable or already waited upon by another thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Upon the join the handle of the thread has gone out of scope and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should not be used any more.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::configure] [arg id] [opt option] [opt value] [opt ...]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command configures various low-level aspects of the thread with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ID [arg id] in the similar way as the standard Tcl command 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd fconfigure] configures some Tcl channel options. Options currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-supported are: [option -eventmark] and [option -unwindonerror].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [option -eventmark] option, when set, limits the number of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-asynchronously posted scripts to the thread event loop. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [cmd {thread::send -async}] command will block until the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of pending scripts in the event loop does not drop below the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configured with [option -eventmark]. Default value for the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[option -eventmark] is 0 (zero) which effectively disables the checking,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-i.e. allows for unlimited number of posted scripts.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [option -unwindonerror] option, when set, causes the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread to unwind if the result of the script processing 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in error. Default value for the [option -unwindonerror]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is 0 (false), i.e. thread continues to process scripts after one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the posted scripts fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::transfer] [arg id] [arg channel]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This moves the specified [arg channel] from the current thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and interpreter to the main interpreter of the thread with the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-given [arg id]. After the move the current interpreter has no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to the channel any more, but the main interpreter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-target thread will be able to use it from now on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command waits until the other thread has incorporated the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel. Because of this it is possible to deadlock the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-participating threads by commanding the other through a 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-synchronous [cmd thread::send] to transfer a channel to us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This easily extends into longer loops of threads waiting for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-each other. Other restrictions: the channel in question must 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-not be shared among multiple interpreters running in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sending thread. This automatically excludes the special channels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for standard input, output and error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal Tcl core implementation and the restriction on 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring shared channels, one has to take extra measures when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-transferring socket channels created by accepting the connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-out of the [cmd socket] commands callback procedures:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server _Accept 2200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after idle [list Accept $s $ipaddr $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::transfer $tid $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::detach] [arg channel]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This detaches the specified [arg channel] from the current thread and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter. After that, the current interpreter has no access to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-channel any more. The channel is in the parked state until some other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(or the same) thread attaches the channel again with [cmd thread::attach].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Restrictions: same as for transferring shared channels with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd thread::transfer] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::attach] [arg channel]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This attaches the previously detached [arg channel] in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-current thread/interpreter. For already existing channels, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command does nothing, i.e. it is not an error to attach the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-same channel more than once. The first operation will actualy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-perform the operation, while all subsequent operation will just
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do nothing. Command throws error if the [arg channel] cannot be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-found in the list of detached channels and/or in the current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Mutexes are most common thread synchronization primitives. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-They are used to synchronize access from two or more threads to one or 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more shared resources. This command provides script-level access to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive and/or recursive mutexes. Exclusive mutexes can be locked 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only once by one thread, while recursive mutexes can be locked many 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-times by the same thread. For recursive mutexes, number of lock and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-unlock operations must match, otherwise, the mutex will never be 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-released, which would lead to various deadlock situations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Care has to be taken when using mutexes in an multithreading program.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Improper use of mutexes may lead to various deadlock situations, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-especially when using exclusive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [cmd thread::mutex] command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::mutex] [method create] [opt -recursive]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the mutex and returns it's opaque handle. This handle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should be used for any future reference to the newly created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If no optional [opt -recursive] argument was specified, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the exclusive mutex. With the [opt -recursive] argument,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command creates a recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::mutex] [method destroy] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the [arg mutex]. Mutex should be in unlocked state before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the destroy attempt. If the mutex is locked, the command will throw 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl error. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::mutex] [method lock] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the [arg mutex]. Locking the exclusive mutex may throw Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-error if on attempt to lock the same mutex twice from the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread. If your program logic forces you to lock the same mutex 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-twice or more from the same thread (this may happen in recursive 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-procedure invocations) you should consider using the recursive mutexes. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::mutex] [method unlock] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the [arg mutex] so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock the already unlocked mutex will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates many-readers/single-writer mutexes. Reader/writer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutexes allow you to serialize access to a shared resource more optimally. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In situations where a shared resource gets mostly read and seldom modified, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-you might gain some performace by using reader/writer mutexes instead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exclusive or recursive mutexes. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For reading the resource, thread should obtain a read lock on the resource.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Read lock is non-exclusive, meaning that more than one thread can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-obtain a read lock to the same resource, without waiting on other readers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For changing the resource, however, a thread must obtain a exclusive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-write lock. This lock effectively blocks all threads from gaining the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-read-lock while the resource is been modified by the writer thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only after the write lock has been released, the resource may be read-locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-again. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [cmd thread::rwmutex] command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex] [method create]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the reader/writer mutex and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to the newly 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex] [method destroy] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys the reader/writer [arg mutex]. If the mutex is already locked,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-attempt to destroy it will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex] [method rlock] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the [arg mutex] for reading. More than one thread may read-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same [arg mutex] at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex] [method wlock] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Locks the [arg mutex] for writing. Only one thread may write-lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the same [arg mutex] at the same time. Attempt to write-lock same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg mutex] twice from the same thread will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::rwmutex] [method unlock] [arg mutex]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unlocks the [arg mutex] so some other thread may lock it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Attempt to unlock already unlocked [arg mutex] will throw Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cond]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command provides script-level access to condition variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A condition variable creates a safe environment for the program 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to test some condition, sleep on it when false and be awakened 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-when it might have become true. A condition variable is always 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used in the conjuction with an exclusive mutex. If you attempt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to use other type of mutex in conjuction with the condition 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable, a Tcl error will be thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command supports following subcommands and options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cond] [method create]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates the condition variable and returns it's opaque handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This handle should be used for any future reference to newly 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cond] [method destroy] [arg cond]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Destroys condition variable [arg cond]. Extreme care has to be taken 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that nobody is using (i.e. waiting on) the condition variable, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-otherwise unexpected errors may happen.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cond] [method notify] [arg cond]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Wakes up all threads waiting on the condition variable [arg cond].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd thread::cond] [method wait] [arg cond] [arg mutex] [opt ms]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command is used to suspend program execution until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable [arg cond] has been signalled or the optional timer has expired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The exclusive [arg mutex] must be locked by the calling thread on entrance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to this command. If the mutex is not locked, Tcl error is thrown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-While waiting on the [arg cond], the command releases [arg mutex]. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Before returning to the calling thread, the command re-acquires the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg mutex] again. Unlocking the [arg mutex] and waiting on the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-condition variable [arg cond] is done atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The [option ms] command option, if given, must be an integer specifying
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time interval in milliseconds the command waits to be signalled. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Otherwise the command waits on condition notify forever.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In multithreading programs, there are many situations where a thread has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to wait for some event to happen until it is allowed to proceed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is usually accomplished by repeatedly testing a condition under the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mutex protection and waiting on the condition variable until the condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-evaluates to true:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set mutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond  [thread::cond  create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {<some_condition_is_true>} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::cond wait $cond $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do some work under mutex protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Repeated testing of the condition is needed since the condition variable 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may get signalled without the condition being actually changed (spurious 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread wake-ups, for example).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section DISCUSSION]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The fundamental threading model in Tcl is that there can be one or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-more Tcl interpreters per thread, but each Tcl interpreter should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-only be used by a single thread which created it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A "shared memory" abstraction is awkward to provide in Tcl because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl makes assumptions about variable and data ownership. Therefore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this extension supports a simple form of threading where the main
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread can manage several background, or "worker" threads. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For example, an event-driven server can pass requests to worker 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads, and then await responses from worker threads or new client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-requests. Everything goes through the common Tcl event loop, so 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-message passing between threads works naturally with event-driven I/O, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd vwait] on variables, and so forth. For the transfer of bulk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-information it is possible to move channels between the threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For advanced multithreading scripts, script-level access to two
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-basic synchronization primitives, mutex and condition variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is also supported.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[see_also tsv tpool ttrace [uri http://www.tcl.tk/doc/howto/thread_model.html]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[keywords thread events {message passing} synchronization mutex]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_end]
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/tpool.man b/vendor/thread2.7.3/doc/tpool.man
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 9649e717d..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/tpool.man
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,225 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[comment {-*- tcl -*- doctools manpage}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_begin tpool n 2.7]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[moddesc {Tcl Threading}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[titledesc {Part of the Tcl threading extension implementing pools of worker threads.}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Tcl 8.4]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Thread [opt 2.7]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[description]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates and manages pools of worker threads. It allows you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to post jobs to worker threads and wait for their completion. The 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool implementation is Tcl event-loop aware. That means that any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-time a caller is forced to wait for an event (job being completed or 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a worker thread becoming idle or initialized), the implementation will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-enter the event loop and allow for servicing of other pending file or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-timer (or any other supported) events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section COMMANDS]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::create] [opt options]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command creates new threadpool. It accepts several options as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs. Options are used to tune some threadpool parameters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the newly created threadpool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Following options are supported:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin options]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt_def -minworkers [arg number]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Minimum number of worker threads needed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-During threadpool creation, the implementation will create somany
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads upfront and will keep at least number of them alive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the lifetime of the threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 0 (zero). which means that a newly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool will have no worker threads initialy. All worker threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will be started on demand by callers running [cmd tpool::post] command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and posting jobs to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt_def -maxworkers [arg number]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Maximum number of worker threads allowed for this threadpool instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If a new job is pending and there are no idle worker threads available,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the implementation will try to create new worker thread. If the number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of available worker threads is lower than the given number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-new worker thread will start. The caller will automatically enter the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-event loop and wait until the worker thread has initialized. If. however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the number of available worker threads is equal to the given number, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the caller will enter the event loop and wait for the first worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to get idle, thus ready to run the job.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value of this parameter is 4 (four), which means that the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool instance will allow maximum of 4 worker threads running jobs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or being idle waiting for new jobs to get posted to the job queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt_def -idletime [arg seconds]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Time in seconds an idle worker thread waits for the job to get posted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the job queue. If no job arrives during this interval and the time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-expires, the worker thread will check the number of currently available
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker threads and if the number is higher than the number set by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[option minthreads] option, it will exit. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If an [option exitscript] has been defined, the exiting worker thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will first run the script and then exit. Errors from the exit script, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if any, are ignored.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The idle worker thread is not servicing the event loop. If you, however,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-put the worker thread into the event loop, by evaluating the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd vwait] or other related Tcl commands, the worker thread 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will not be in the idle state, hence the idle timer will not be 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-taken into account.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt_def -initcmd [arg script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script used to initialize new worker thread. This is usually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to load packages and commands in the worker, set default variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create namespaces, and such. If the passed script runs into a Tcl error, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker will not be created and the initiating command (either the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd tpool::create] or [cmd tpool::post]) will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, hence, the Tcl interpreter of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker thread will contain just the initial set of Tcl commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt_def -exitcmd [arg script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets a Tcl script run when the idle worker thread exits. This is normaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to cleanup the state of the worker thread, release reserved resources,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cleanup memory and such.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Default value for this option is unspecified, thus no Tcl script will run
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-on the worker thread exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command returns a list of IDs of threadpools created with the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd tpool::create] command. If no threadpools were found, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return empty list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::post] [opt -detached] [opt -nowait] [arg tpool] [arg script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command sends a [arg script] to the target [arg tpool] threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for execution. The script will be executed in the first available idle 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-worker thread. If there are no idle worker threads available, the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-will create new one, enter the event loop and service events until the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-newly created thread is initialized. If the current number of worker 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads is equal to the maximum number of worker threads, as defined 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-during the threadpool creation, the command will enter the event loop and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-service events while waiting for one of the worker threads to become idle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional [opt -nowait] argument is given, the command will not wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for one idle worker. It will just place the job in the pool's job queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and return immediately.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the ID of the posted job. This ID is used for subsequent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd tpool::wait], [cmd tpool::get] and [cmd tpool::cancel] commands to wait
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for and retrieve result of the posted script, or cancel the posted job
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-respectively. If the optional [opt -detached] argument is specified, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will post a detached job. A detached job can not be cancelled or 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waited upon and is not identified by the job ID.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the threadpool [arg tpool] is not found in the list of active
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread pools, the command will throw error. The error will also be triggered
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if the newly created worker thread fails to initialize.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::wait] [arg tpool] [arg joblist] [opt varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command waits for one or many jobs, whose job IDs are given in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg joblist] to get processed by the worker thread(s). If none of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified jobs are ready, the command will enter the event loop, service
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-events and wait for the first job to get ready.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of completed job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt varname] is given, it will be set to the list of jobs in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg joblist] which are still pending. If the threadpool [arg tpool] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::cancel] [arg tpool] [arg joblist] [opt varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command cancels the previously posted jobs given by the [arg joblist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the pool [arg tpool]. Job cancellation succeeds only for job still
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-waiting to be processed. If the job is already being executed by one of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the worker threads, the job will not be cancelled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The command returns the list of cancelled job IDs. If the optional variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[opt varname] is given, it will be set to the list of jobs in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg joblist] which were not cancelled. If the threadpool [arg tpool] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of active thread pools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::get] [arg tpool] [arg job]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command retrieves the result of the previously posted [arg job].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Only results of jobs waited upon with the [cmd tpool::wait] command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be retrieved. If the execution of the script resulted in error, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the command will throw the error and update the [var errorInfo] and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[var errorCode] variables correspondingly. If the pool [arg tpool]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is not found in the list of threadpools, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the job [arg job] is not ready for retrieval, because it is currently
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-being executed by the worker thread, the command will throw error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::preserve] [arg tpool]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command increments the reference counter of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool [arg tpool] by one (1). Command returns the value of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the increment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-By incrementing the reference counter, the caller signalizes that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-he/she wishes to use the resource for a longer period of time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::release] [arg tpool]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Each call to this command decrements the reference counter of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadpool [arg tpool] by one (1).Command returns the value of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference counter after the decrement. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-When the reference counter reaches zero (0), the threadpool [arg tpool]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is marked for termination. You should not reference the threadpool 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-after the [cmd tpool::release] command returns zero. The [arg tpool]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-handle goes out of scope and should not be used any more. Any following
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-reference to the same threadpool handle will result in Tcl error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::suspend] [arg tpool]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Suspends processing work on this queue. All pool workers are paused
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-but additional work can be added to the pool. Note that adding the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-additional work will not increase the number of workers dynamically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as the pool processing is suspended. Number of workers is maintained
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the count that was found prior suspending worker activity.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If you need to assure certain number of worker threads, use the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[option minworkers] option of the [cmd tpool::create] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tpool::resume] [arg tpool]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Resume processing work on this queue. All paused (suspended) 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-workers are free to get work from the pool. Note that resuming pool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-operation will just let already created workers to proceed. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It will not create additional worker threads to handle the work 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-posted to the pool's work queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section DISCUSSION]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Threadpool is one of the most common threading paradigm when it comes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to server applications handling a large number of relatively small tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A very simplistic model for building a server application would be to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-create a new thread each time a request arrives and service the request 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the new thread. One of the disadvantages of this approach is that 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the overhead of creating a new thread for each request is significant; 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a server that created a new thread for each request would spend more time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and consume more system resources in creating and destroying threads than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in processing actual user requests. In addition to the overhead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creating and destroying threads, active threads consume system resources.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creating too many threads can cause the system to run out of memory or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trash due to excessive memory consumption.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread pool offers a solution to both the problem of thread life-cycle 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-overhead and the problem of resource trashing. By reusing threads for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-multiple tasks, the thread-creation overhead is spread over many tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As a bonus, because the thread already exists when a request arrives, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the delay introduced by thread creation is eliminated. Thus, the request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-can be serviced immediately. Furthermore, by properly tuning the number 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of threads in the thread pool, resource thrashing may also be eliminated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-by forcing any request to wait until a thread is available to process it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[see_also tsv ttrace thread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[keywords thread threadpool]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_end]
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/tsv.man b/vendor/thread2.7.3/doc/tsv.man
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 2ccace204..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/tsv.man
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,331 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[comment {-*- tcl -*- doctools manpage}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_begin tsv n 2.7]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[moddesc {Tcl Threading}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[titledesc {Part of the Tcl threading extension allowing script level manipulation of data shared between threads.}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Tcl 8.4]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Thread [opt 2.7]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[description]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes commands implementing thread shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A thread shared variable is very similar to a Tcl array but in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-contrast to a Tcl array it is created in shared memory and can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be accessed from many threads at the same time. Important feature of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread shared variable is that each access to the variable is internaly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-protected by a mutex so script programmer does not have to take care 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about locking the variable himself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are not bound to any thread explicitly. That 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-means that when a thread which created any of thread shared variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exits, the variable and associated memory is not unset/reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-User has to explicitly unset the variable to reclaim the memory 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-consumed by the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {ELEMENT COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::names] [opt pattern]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of shared variables matching optional [opt pattern] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or all known variables if pattern is ommited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::object] [arg varname] [arg element]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Creates object accessor command for the [arg element] in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable [arg varname]. Using this command, one can apply most 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the other shared variable commands as method functions of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the element object command. The object command is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted when the element which this command is pointing to is unset.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::set foo bar "A shared string"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set string [tsv::object foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % $string append " appended"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    => A shared string appended
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::set] [arg varname] [arg element] [opt value]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sets the value of the [arg element] in the shared variable [arg varname] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to [arg value] and returns the value to caller. The [arg value]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-may be ommited, in which case the command will return the current 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-value of the element. If the element cannot be found, error is triggered.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::get] [arg varname] [arg element] [opt namedvar]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Retrieves the value of the [arg element] from the shared variable [arg varname].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional argument [arg namedvar] is given, the value is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stored in the named variable. Return value of the command depends 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the existence of the optional argument [arg namedvar].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the argument is ommited and the requested element cannot be found 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared array, the command triggers error. If, however, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-optional argument is given on the command line, the command returns 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-true (1) if the element is found or false (0) if the element is not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::unset] [arg varname] [opt element]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unsets the [arg element] from the shared variable [arg varname].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional element is not given, it deletes the variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::exists] [arg varname] [arg element]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Checks wether the [arg element] exists in the shared variable [arg varname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and returns true (1) if it does or false (0) if it doesn't.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::pop] [arg varname] [arg element]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns value of the [arg element] in the shared variable [arg varname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and unsets the element, all in one atomic operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::move] [arg varname] [arg oldname] [arg newname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Renames the element [arg oldname] to the [arg newname] in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable [arg varname]. This effectively performs an get/unset/set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sequence of operations but all in one atomic step.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::incr] [arg varname] [arg element] [opt count]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd incr] command but increments the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the [arg element] in shared variaboe [arg varname] instead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::append] [arg varname] [arg element] [arg value] [opt {value ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd append] command but appends one or more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values to the [arg element] in shared variable [arg varname] instead of the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lock] [arg varname] [arg arg] [opt {arg ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates passed arguments and evaluates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulting script under the internal mutex protection. During the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script evaluation, the entire shared variable is locked. For shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable commands within the script, internal locking is disabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-so no deadlock can occur. It is also allowed to unset the shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable from within the script. The shared variable is automatically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-created if it did not exists at the time of the first lock operation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % tsv::lock foo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lappend foo bar 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts stderr [tsv::set foo bar]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::unset foo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {LIST COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Those command are similar to the equivalently named Tcl command. The difference
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is that they operate on elements of shared arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lappend] [arg varname] [arg element] [arg value] [opt {value ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lappend] command but appends one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values to the [arg element] in shared variable [arg varname] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::linsert] [arg varname] [arg element] [arg index] [arg value] [opt {value ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd linsert] command but inserts one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values at the [arg index] list position in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg element] in the shared variable [arg varname] instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lreplace] [arg varname] [arg element] [arg first] [arg last] [opt {value ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lreplace] command but replaces one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or more values between the [arg first] and [arg last] position 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the [arg element] of the shared variable [arg varname] instead of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::llength] [arg varname] [arg element]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd llength] command but returns length 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the [arg element] in the shared variable [arg varname] instead of the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lindex] [arg varname] [arg element] [opt index]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lindex] command but returns the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the [arg index] list position of the [arg element] from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the shared variable [arg varname] instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lrange] [arg varname] [arg element] [arg from] [arg to]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lrange] command but returns values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-between [arg from] and [arg to] list positions from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg element] in the shared variable [arg varname] instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lsearch] [arg varname] [arg element] [opt options] [arg pattern]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lsearch] command but searches the [arg element]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable [arg varname] instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lset] [arg varname] [arg element] [arg index] [opt {index ...}] [arg value]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to standard Tcl [cmd lset] command but sets the [arg element]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable [arg varname] instead of the Tcl variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lpop] [arg varname] [arg element] [opt index]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Similar to the standard Tcl [cmd lindex] command but in addition to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returning, it also splices the value out of the [arg element]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from the shared variable [arg varname] in one atomic operation. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In contrast to the Tcl [cmd lindex] command, this command returns 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::lpush] [arg varname] [arg element] [opt index]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command performes the opposite of the [cmd tsv::lpop] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As its counterpart, it returns no value to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {ARRAY COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command supports most of the options of the standard Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd array] command. In addition to those, it allows binding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a shared variable to some persisten storage databases. Currently 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the only persistent option supported is the famous GNU Gdbm 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database. This option has to be selected during the package 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compilation time. The implementation provides hooks for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-defining other persistency layers, if needed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array set}] [arg varname] [arg list]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl [cmd {array set}].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array get}] [arg varname] [opt pattern]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl [cmd {array get}].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array names}] [arg varname] [opt pattern]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl [cmd {array names}].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array size}] [arg varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl [cmd {array size}].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array reset}] [arg varname] [arg list]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Does the same as standard Tcl [cmd {array set}] but it clears
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the [arg varname] and sets new values from the list atomically.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array bind}] [arg varname] [arg handle]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Binds the [arg varname] to the persistent storage [arg handle].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The format of the [arg handle] is <handler>:<address>. For the built-in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GNU Gdbm persistence layer, the format of the handle is "gdbm:<path>"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-where <path> is the path to the Gdbm database file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array unbind}] [arg varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Unbinds the shared [arg array] from its bound persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd {tsv::array isbound}] [arg varname]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns true (1) if the shared [arg varname] is bound to some 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-persistent storage or zero (0) if not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {KEYED LIST COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Keyed list commands are borrowed from the TclX package. Keyed lists provide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a structured data type built upon standard Tcl lists. This is a functionality
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-similar to structs in the C programming language.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A keyed list is a list in which each element contains a key and value 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pair. These element pairs are stored as lists themselves, where the key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is the first element of the list, and the value is the second. The 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key-value pairs are referred to as fields.  This is an example of a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-keyed list:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {{NAME  {Frank  Zappa}} {JOB {musician and composer}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Fields may contain subfields; `.' is the separator character. Subfields 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are actually fields  where the value is another keyed list. Thus the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following list has the top level fields ID and NAME, and subfields 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NAME.FIRST and NAME.LAST:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    {ID 106} {NAME {{FIRST Frank} {LAST Zappa}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-There is no limit to the recursive depth of subfields,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-allowing one to build complex data structures. Keyed lists are constructed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and accessed via a number of commands. All  keyed  list management 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands take the name of the variable containing the keyed list as an 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-argument (i.e. passed by reference), rather than passing the list directly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::keyldel] [arg varname] [arg keylist] [arg key]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Delete the field specified by [arg key] from the keyed list [arg keylist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable [arg varname].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This removes both the key and the value from the keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::keylget] [arg varname] [arg keylist] [arg key] [opt retvar]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return the value associated with [arg key] from the keyed list [arg keylist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the shared variable [arg varname].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If the optional [arg retvar] is not specified, then the value will be 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-returned as the result of the command. In this case, if key is not found 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the list, an error will result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If [arg retvar] is specified and [arg key] is in the list, then the value 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is returned in the variable [arg retvar] and the command returns 1 if the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-key was present within the list. If [arg key] isn't in the list, the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command will return 0, and [arg retvar] will be left unchanged. If {} is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-specified for [arg retvar], the value is not returned, allowing the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-programmer to determine if a [arg key] is present in a keyed list without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-setting a variable as a side-effect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::keylkeys] [arg varname] [arg keylist] [opt key]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Return  the a list of the keys in the keyed list [arg keylist] in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared variable [arg varname]. If [arg key] is specified, then it is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the name of a key field who's subfield keys are to be retrieved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd tsv::keylset] [arg varname] [arg keylist] [arg key] [arg value] [opt {key value..}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Set the value associated with [arg key], in the keyed list [arg keylist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to [arg value]. If the [arg keylist] does not exists, it is created. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-If [arg key] is not currently in the list, it will be added. If it already
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-exists, [arg value] replaces the existing value. Multiple keywords and 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-values may be specified, if desired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section DISCUSSION]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The current implementation of thread shared variables allows for easy and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-convenient access to data shared between different threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Internally, the data is stored in Tcl objects and all package commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-operate on internal data representation, thus minimizing shimmering and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-improving performance. Special care has been taken to assure that all 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-object data is properly locked and deep-copied when moving objects between
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Due to the internal design of the Tcl core, there is no provision of full 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-integration of shared variables within the Tcl syntax, unfortunately. All
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access to shared data must be performed with the supplied package commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Also, variable traces are not supported. But even so, benefits of easy, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simple and safe shared data manipulation outweights imposed limitations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section CREDITS]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread shared variables are inspired by the nsv interface found in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AOLserver, a highly scalable Web server from America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[see_also tpool ttrace thread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[keywords threads synchronization locking {thread shared data}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_end]
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/doc/ttrace.man b/vendor/thread2.7.3/doc/ttrace.man
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index fd2dd1e43..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/doc/ttrace.man
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,230 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[comment {-*- tcl -*- doctools manpage}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_begin ttrace n 2.7]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[moddesc {Tcl Threading}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[titledesc {Trace-based interpreter initialization}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Tcl 8.4]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[require Thread [opt 2.7]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[description]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package creates a framework for on-demand replication of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-interpreter state accross threads in an multithreading application.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It relies on the mechanics of Tcl command tracing and the Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd unknown] command and mechanism.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The package requires Tcl threading extension but can be alternatively
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used stand-alone within the AOLserver, a scalable webserver from 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-America Online.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In a nutshell, a short sample illustrating the usage of the ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with the Tcl threading extension:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[example {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % package require Ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    2.7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t1 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % ttrace::eval {proc test args {return test-[thread::id]}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t1 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1802800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % set t2 [thread::create {package require Ttrace; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % thread::send $t2 test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test-tid0x1804000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As seen from above, the [cmd ttrace::eval] and [cmd ttrace::update]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands are used to create a thread-wide definition of a simple 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl procedure and replicate that definition to all, already existing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-or later created, threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {USER COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This section describes user-level commands. Those commands can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used by script writers to control the execution of the tracing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::eval] [arg arg] [opt {arg ...}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This command concatenates given arguments and evaluates the resulting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl command with trace framework enabled. If the command execution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-was ok, it takes necessary steps to automatically propagate the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace epoch change to all threads in the application. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For AOLserver, only newly created threads actually receive the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-epoch change. For the Tcl threading extension, all threads created by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the extension are automatically updated. If the command execution 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resulted in Tcl error, no state propagation takes place.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This is the most important user-level command of the package as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-it wraps most of the commands described below. This greatly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-simplifies things, because user need to learn just this (one)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-command in order to effectively use the package. Other commands, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-as desribed below, are included mostly for the sake of completeness.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::enable]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Activates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and starts a new trace epoch. The trace epoch encapsulates all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes done to the interpreter during the time traces are activated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::disable]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deactivates all registered callbacks in the framework
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and closes the current trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::cleanup]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to clean-up all on-demand loaded resources in the interpreter. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-It effectively brings Tcl interpreter to its pristine state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::update] [opt epoch]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Used to refresh the state of the interpreter to match the optional 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-trace [opt epoch]. If the optional [opt epoch] is not given, it takes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the most recent trace epoch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::getscript]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns a synthetized Tcl script which may be sourced in any interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This script sets the stage for the Tcl [cmd unknown] command so it can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-load traced resources from the in-memory database. Normally, this command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is automatically invoked by other higher-level commands like
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd ttrace::eval] and [cmd ttrace::update].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section {CALLBACK COMMANDS}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-A word upfront: the package already includes callbacks for tracing 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-following Tcl commands: [cmd proc], [cmd namespace], [cmd variable],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd load], and [cmd rename]. Additionaly, a set of callbacks for 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tracing resources (object, clasess) for the XOTcl v1.3.8+, an 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OO-extension to Tcl, is also provided.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This gives a solid base for solving most of the real-life needs and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-serves as an example for people wanting to customize the package 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to cover their specific needs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Below, you can find commands for registering callbacks in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-framework and for writing callback scripts. These callbacks are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-invoked by the framework in order to gather interpreter state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-changes, build in-memory database, perform custom-cleanups and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-various other tasks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_begin definitions]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::atenable] [arg cmd] [arg arglist] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at [cmd ttrace::enable].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, [arg cmd], a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, [arg arglist] and the [arg body] of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl [cmd proc] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::atdisable] [arg cmd] [arg arglist] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated at [cmd ttrace::disable].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis. The callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-definition includes the name of the callback, [arg cmd], a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of callback arguments, [arg arglist] and the [arg body] of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-callback. Effectively, this actually resembles the call interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the standard Tcl [cmd proc] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::addtrace] [arg cmd] [arg arglist] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for tracing the Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd cmd] command. The callback definition includes the name of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Tcl command to trace, [arg cmd], a list of callback arguments, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg arglist] and the [arg body] of the callback. Effectively, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-this actually resembles the call interface of the standard Tcl 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd proc] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::addscript] [arg name] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated for building a Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to be passed to other interpreters. This script is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-used to set the stage for the Tcl [cmd unknown] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The callback definition includes the name of the callback,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[arg name] and the [arg body] of the callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::addresolver] [arg cmd] [arg arglist] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the overloaded Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd unknown] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This callback is used to resolve the resource and load the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource in the current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::addcleanup] [arg body]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers Tcl callback to be activated by the [cmd trace::cleanup].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registered callbacks are activated on FIFO basis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::addentry] [arg cmd] [arg var] [arg val]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Adds one entry to the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::getentry] [arg cmd] [arg var]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns the value of the entry from the named in-memory database. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::getentries] [arg cmd] [opt pattern]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Returns names of all entries from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::delentry] [arg cmd]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Deletes an entry from the named in-memory database.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[call [cmd ttrace::preload] [arg cmd]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Registers the Tcl command to be loaded in the interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Commands registered this way will always be the part of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the interpreter and not be on-demand loaded by the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd unknown] command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[list_end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[section DISCUSSION]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Common introspective state-replication approaches use a custom Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to introspect the running interpreter and synthesize another
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl script to replicate this state in some other interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This package, on the contrary, uses Tcl command traces. Command 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-traces are registered on selected Tcl commands, like [cmd proc], 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[cmd namespace], [cmd load] and other standard (and/or user-defined)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl commands. When activated, those traces build an in-memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-database of created resources. This database is used as a resource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-repository for the (overloaded) Tcl [cmd unknown] command which 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-creates the requested resource in the interpreter on demand. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This way, users can update just one interpreter (master) in one 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-thread and replicate that interpreter state (or part of it) to other 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threads/interpreters in the process.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[para]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Immediate benefit of such approach is the much smaller memory footprint
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the application and much faster thread creation. By not actually 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-loading all necessary procedures (and other resources) in every thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-at the thread initialization time, but by deffering this to the time the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-resource is actually referenced, significant improvements in both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-memory consumption and thread initialization time can be achieved. Some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tests have shown that memory footprint of an multithreading Tcl application
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-went down more than three times and thread startup time was reduced for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-about 50 times. Note that your mileage may vary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Other benefits include much finer control about what (and when) gets 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-replicated from the master to other Tcl thread/interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[see_also tsv tpool thread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[keywords {command tracing} introspection]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[manpage_end]
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/psGdbm.c b/vendor/thread2.7.3/generic/psGdbm.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 6f29ca7a2..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/psGdbm.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,397 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements wrappers for persistent gdbm storage for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * shared variable arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef HAVE_GDBM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <gdbm.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h> /* For free() */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Functions implementing the persistent store interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_open_proc   ps_gdbm_open;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_close_proc  ps_gdbm_close;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_get_proc    ps_gdbm_get;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_put_proc    ps_gdbm_put;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_first_proc  ps_gdbm_first;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_next_proc   ps_gdbm_next;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_delete_proc ps_gdbm_delete;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_free_proc   ps_gdbm_free;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ps_geterr_proc ps_gdbm_geterr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This structure collects all the various pointers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to the functions implementing the gdbm store.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-const PsStore GdbmStore = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "gdbm",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_open,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_get,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_put,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_first,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_next,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_delete,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_close,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_free,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_gdbm_geterr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterGdbmStore --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Register the gdbm store with shared variable implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterGdbmStore(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sv_RegisterPsStore(&GdbmStore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_open --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Opens the dbm-based persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Opaque handle of the opened dbm storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      The gdbm file might be created if not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ClientData
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_open(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *ext;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DString toext;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DStringInit(&toext);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ext = Tcl_UtfToExternalDString(NULL, path, strlen(path), &toext);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dbf = gdbm_open(ext, 512, GDBM_WRCREAT|GDBM_SYNC|GDBM_NOLOCK, 0666, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DStringFree(&toext);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return (ClientData)dbf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_close --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Closes the gdbm-based persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_close(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData handle)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    gdbm_close((GDBM_FILE)handle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_get --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Retrieves data for the key from the dbm storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - no such key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Data returned must be freed by the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_get(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ClientData handle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     const char   *key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     char **dataptrptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     size_t    *lenptr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf = (GDBM_FILE)handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datum drec, dkey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dptr  = (char*)key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dsize = strlen(key) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    drec = gdbm_fetch(dbf, dkey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (drec.dptr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *dataptrptr = drec.dptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *lenptr = drec.dsize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_first --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Starts the iterator over the dbm file and returns the first record.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - no more records in the iterator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Data returned must be freed by the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_first(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  handle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char   **keyptrptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char  **dataptrptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t     *lenptr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf = (GDBM_FILE)handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datum drec, dkey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey = gdbm_firstkey(dbf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (dkey.dptr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    drec = gdbm_fetch(dbf, dkey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (drec.dptr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *dataptrptr = drec.dptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *lenptr = drec.dsize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *keyptrptr = dkey.dptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_next --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Uses the iterator over the dbm file and returns the next record.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - no more records in the iterator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Data returned must be freed by the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int ps_gdbm_next(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  handle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char   **keyptrptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char  **dataptrptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t     *lenptr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf = (GDBM_FILE)handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datum drec, dkey, dnext;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dptr  = *keyptrptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dsize = strlen(*keyptrptr) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dnext = gdbm_nextkey(dbf, dkey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    free(*keyptrptr), *keyptrptr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (dnext.dptr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    drec = gdbm_fetch(dbf, dnext);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (drec.dptr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *dataptrptr = drec.dptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *lenptr = drec.dsize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *keyptrptr = dnext.dptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_put --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Stores used data bound to a key in dbm storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     -1 - error; use ps_dbm_geterr to retrieve the error message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      If the key is already associated with some user data, this will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      be replaced by the new data chunk.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_put(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData handle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char   *key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char     *dataptr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t        len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf = (GDBM_FILE)handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datum drec, dkey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dptr  = (char*)key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dsize = strlen(key) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    drec.dptr  = dataptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    drec.dsize = len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = gdbm_store(dbf, dkey, drec, GDBM_REPLACE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_delete --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Deletes the key and associated data from the dbm storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     -1 - error; use ps_dbm_geterr to retrieve the error message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      If the key is already associated with some user data, this will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      be replaced by the new data chunk.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_delete(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData handle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char   *key)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GDBM_FILE dbf = (GDBM_FILE)handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    datum dkey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dptr  = (char*)key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dkey.dsize = strlen(key) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = gdbm_delete(dbf, dkey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_free --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Frees memory allocated by the gdbm implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_free(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    void   *data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    free(data);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ps_gdbm_geterr --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Retrieves the textual representation of the error caused
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      by the last dbm command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Pointer to the strimg message.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const char*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ps_gdbm_geterr(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData handle)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * The problem with gdbm interface is that it uses the global
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * gdbm_errno variable which is not per-thread nor mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * protected. This variable is used to reference array of gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * error text strings. It is very dangeours to use this in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * MT-program without proper locking. For this kind of app
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * we should not be concerned with that, since all ps_gdbm_xxx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * operations are performed under shared variable lock anyway.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return gdbm_strerror(gdbm_errno);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif  /* HAVE_GDBM */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/psGdbm.h b/vendor/thread2.7.3/generic/psGdbm.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4d68dd6c8..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/psGdbm.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,24 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * psGdbm.h --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _PSGDBM_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _PSGDBM_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void Sv_RegisterGdbmStore();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _PSGDBM_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/tclThread.h b/vendor/thread2.7.3/generic/tclThread.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index fad4a7172..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/tclThread.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,31 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * --------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * tclthread.h --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Global header file for the thread extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Thread extension version numbers are not stored here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * because this isn't a public export file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _TCL_THREAD_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _TCL_THREAD_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <tcl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Exported from threadCmd.c file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DLLEXPORT int Thread_Init(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _TCL_THREAD_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/tclThreadInt.h b/vendor/thread2.7.3/generic/tclThreadInt.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 55b8addf9..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,174 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * --------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * tclthreadInt.h --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Global internal header file for the thread extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _TCL_THREAD_INT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _TCL_THREAD_INT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThread.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h> /* For strtoul */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h> /* For memset and friends */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Used to tag functions that are only to be visible within the module being
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * built and not outside it (where this is supported by the linker).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef MODULE_SCOPE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define MODULE_SCOPE extern "C"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define MODULE_SCOPE extern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * For linking against NaviServer/AOLserver require V4 at least
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# include <ns.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if !defined(NS_MAJOR_VERSION) || NS_MAJOR_VERSION < 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  error "unsupported NaviServer/AOLserver version"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Allow for some command names customization.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Only thread:: and tpool:: are handled here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Shared variable commands are more complicated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Look into the threadSvCmd.h for more info.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_CMD_PREFIX "thread::"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TPOOL_CMD_PREFIX  "tpool::"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Exported from threadSvCmd.c file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int Sv_Init(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Exported from threadSpCmd.c file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int Sp_Init(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Exported from threadPoolCmd.c file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int Tpool_Init(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Macros for splicing in/out of linked lists
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SpliceIn(a,b)                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (a)->nextPtr = (b);                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((b) != NULL)                           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (b)->prevPtr = (a);                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (a)->prevPtr = NULL, (b) = (a)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SpliceOut(a,b)                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((a)->prevPtr != NULL)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (a)->prevPtr->nextPtr = (a)->nextPtr;  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (b) = (a)->nextPtr;                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((a)->nextPtr != NULL)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (a)->nextPtr->prevPtr = (a)->prevPtr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Version macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_MINIMUM_VERSION(major,minor) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ((TCL_MAJOR_VERSION > (major)) || \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((TCL_MAJOR_VERSION == (major)) && (TCL_MINOR_VERSION >= (minor))))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Utility macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_CMD(a,b,c) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if (Tcl_CreateObjCommand((a),(b),(c),(ClientData)NULL, NULL) == NULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define OPT_CMP(a,b) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ((a) && (b) && (*(a)==*(b)) && (*(a+1)==*(b+1)) && (!strcmp((a),(b))))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef TCL_TSD_INIT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TCL_TSD_INIT(keyPtr) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (ThreadSpecificData*)Tcl_GetThreadData((keyPtr),sizeof(ThreadSpecificData))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure to pass to NsThread_Init. This holds the module
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * and virtual server name for proper interp initializations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *modname;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *server;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} NsThreadInterpData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Handle binary compatibility regarding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tcl_GetErrorLine in 8.x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See Tcl bug #3562640.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int threadTclVersion;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    void *unused1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    void *unused2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int errorLine;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} tclInterpType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(TCL_TIP285)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# undef Tcl_GetErrorLine
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if defined(USE_TCL_STUBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define Tcl_GetErrorLine(interp) ((threadTclVersion>85)? \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((int (*)(Tcl_Interp *))((&(tclStubsPtr->tcl_PkgProvideEx))[605]))(interp): \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (((tclInterpType *)(interp))->errorLine))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   undef Tcl_AddErrorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define Tcl_AddErrorInfo(interp, msg) ((threadTclVersion>85)? \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((void (*)(Tcl_Interp *, Tcl_Obj *))((&(tclStubsPtr->tcl_PkgProvideEx))[574]))(interp, Tcl_NewStringObj(msg, -1)): \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((void (*)(Tcl_Interp *, const char *))((&(tclStubsPtr->tcl_PkgProvideEx))[66]))(interp, msg))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   undef Tcl_BackgroundError
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define Tcl_BackgroundError(interp) ((threadTclVersion>85)? \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((void (*)(Tcl_Interp *, int))((&(tclStubsPtr->tcl_PkgProvideEx))[609]))(interp, TCL_ERROR): \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((void (*)(Tcl_Interp *))((&(tclStubsPtr->tcl_PkgProvideEx))[76]))(interp))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define Tcl_GetErrorLine(interp) (((tclInterpType *)(interp))->errorLine)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* 8.5, 8.4, or less - Emulate access to the error-line information
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is TIP 336, unrelated to 285 (async cancellation).  When doing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * a static link of the thread package (use case: basekits, tclkits,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ...)  and the core Tcl is < 8.6 we cannot use TCL_TIP285 to get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * things done, because USE_TCL_STUBS is not set for static builds,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * causing the check in threadCmd.c to bomb.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if !TCL_MINIMUM_VERSION(8,6)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define Tcl_GetErrorLine(interp) (((tclInterpType *)(interp))->errorLine)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _TCL_THREAD_INT_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/tclXkeylist.c b/vendor/thread2.7.3/generic/tclXkeylist.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c28578d71..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/tclXkeylist.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1483 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * tclXkeylist.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Extended Tcl keyed list commands and interfaces.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright 1991-1999 Karl Lehenbauer and Mark Diekhans.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Permission to use, copy, modify, and distribute this software and its
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * documentation for any purpose and without fee is hereby granted, provided
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * that the above copyright notice appear in all copies.  Karl Lehenbauer and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Mark Diekhans make no representations about the suitability of this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * software for any purpose.  It is provided "as is" without express or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * implied warranty.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file was synthetized from the TclX distribution and made
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * self-containing in order to encapsulate the keyed list datatype
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * for the inclusion in the Tcl threading extension. I have made
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * some minor changes to it in order to get internal object handling
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * thread-safe and allow for this datatype to be used from within
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the thread shared variables implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * For any questions, contant Zoran Vasiljevic (zoran@archiware.com)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclXkeylist.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef STATIC_BUILD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if TCL_MAJOR_VERSION >= 9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Static build, Tcl >= 9, compile-time decision to disable T_ROT calls.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef Tcl_RegisterObjType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define Tcl_RegisterObjType(typePtr)    (typePtr)->setFromAnyProc = NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Static build, Tcl <= 9   --> T_ROT is directly linked, no stubs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Nothing needs to be done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else /* !STATIC_BUILD */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Dynamic build. Assume building with stubs (xx) and make a run-time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * decision regarding T_ROT.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * (Ad xx): Should be checked. Without stubs we have to go like static.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef Tcl_RegisterObjType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define Tcl_RegisterObjType(typePtr) if (threadTclVersion<90) { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ((void (*)(const Tcl_ObjType *))((&(tclStubsPtr->tcl_PkgProvideEx))[211]))(typePtr); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} else { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (typePtr)->setFromAnyProc = NULL; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* eof STATIC_BUILD */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*     Stuff copied verbatim from the rest of TclX to avoid dependencies     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Assert macro for use in TclX.  Some GCCs libraries are missing a function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * used by their macro, so we define out own.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCLX_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TclX_Assert(expr) ((expr) ? (void)0 : \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            panic("TclX assertion failure: %s:%d \"%s\"\n",\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            __FILE__, __LINE__, "expr"))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TclX_Assert(expr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TRUE  1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define FALSE 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Macro that behaves like strdup, only uses ckalloc.  Also macro that does the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * same with a string that might contain zero bytes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define ckstrdup(sourceStr) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (strcpy (ckalloc (strlen (sourceStr) + 1), sourceStr))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define ckbinstrdup(sourceStr, length) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  ((char *) memcpy (ckalloc (length + 1), sourceStr, length + 1))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Used to return argument messages by most commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const char *tclXWrongArgs = "wrong # args: ";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType *listType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_IsNullObj --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Check if an object is {}, either in list or zero-lemngth string form, with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * out forcing a conversion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o objPtr - Object to check.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   True if NULL, FALSE if not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_IsNullObj (objPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *objPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objPtr->typePtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return (objPtr->length == 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (objPtr->typePtr == listType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_ListObjLength(NULL, objPtr, &length);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return (length == 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (void)Tcl_GetString(objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return (objPtr->length == 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_AppendObjResult --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Append a variable number of strings onto the object result already
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * present for an interpreter.  If the object is shared, the current contents
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * are discarded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Interpreter to set the result in.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o args - Strings to append, terminated by a NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_AppendObjResult(Tcl_Interp *interp, ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    va_list argList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *string;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    va_start(argList, interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr = Tcl_GetObjResult (interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsShared(resultPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr = Tcl_NewStringObj((char *)NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        string = va_arg(argList, char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (string == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendToObj (resultPtr, string, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    va_end(argList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_WrongArgs --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Easily create "wrong # args" error messages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o commandNameObj - Object containing name of command (objv[0])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o string - Text message to append.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   TCL_ERROR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_WrongArgs (interp, commandNameObj, string)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *commandNameObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char        *string;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *commandName = Tcl_GetString(commandNameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *resultPtr = Tcl_GetObjResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_AppendStringsToObj (resultPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            tclXWrongArgs,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            commandName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            (char *)NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*string != '\0') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendStringsToObj (resultPtr, " ", string, (char *)NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*                    Here is where the original file begins                 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*---------------------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Keyed lists are stored as arrays recursively defined objects.  The data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * portion of a keyed list entry is a Tcl_Obj which may be a keyed list object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * or any other Tcl object.  Since determine the structure of a keyed list is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * lazy (you don't know if an element is data or another keyed list) until it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * is accessed, the object can be transformed into a keyed list from a Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * string or list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * An entry in a keyed list array.   (FIX: Should key be object?)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char    *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} keylEntry_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Internal representation of a keyed list object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          arraySize;   /* Current slots available in the array.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          numEntries;  /* Number of actual entries in the array. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylEntry_t *entries;     /* Array of keyed list entries.           */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} keylIntObj_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Amount to increment array size by when it needs to grow.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define KEYEDLIST_ARRAY_INCR_SIZE 16
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Macro to duplicate a child entry of a keyed list if it is share by more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * than the parent.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define DupSharedKeyListChild(keylIntPtr, idx) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsShared (keylIntPtr->entries [idx].valuePtr)) { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [idx].valuePtr = \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DuplicateObj (keylIntPtr->entries [idx].valuePtr); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount (keylIntPtr->entries [idx].valuePtr); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Macros to validate an keyed list object or internal representation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCLX_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define KEYL_OBJ_ASSERT(keylAPtr) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TclX_Assert (keylAPtr->typePtr == &keyedListType); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ValidateKeyedList (keylAIntPtr); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   define KEYL_REP_ASSERT(keylAIntPtr) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ValidateKeyedList (keylAIntPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define KEYL_REP_ASSERT(keylAIntPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Prototypes of internal functions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCLX_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ValidateKeyedList(keylIntObj_t *keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ValidateKey(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         const char *key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         size_t keyLen,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         int isPath);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static keylIntObj_t *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AllocKeyedListIntRep(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FreeKeyedListData(keylIntObj_t *keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EnsureKeyedListSpace(keylIntObj_t *keylIntPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  int           newNumEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DeleteKeyedListEntry(keylIntObj_t *keylIntPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  int           entryIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FindKeyedListEntry(keylIntObj_t *keylIntPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                const char   *key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                int          *keyLenPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                const char   **nextSubKeyPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ObjToKeyedListEntry(Tcl_Interp  *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 Tcl_Obj     *objPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 keylEntry_t *entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DupKeyedListInternalRep(Tcl_Obj *srcPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                     Tcl_Obj *copyPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FreeKeyedListInternalRep(Tcl_Obj *keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SetKeyedListFromAny(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 Tcl_Obj    *objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-UpdateStringOfKeyedList(Tcl_Obj *keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylgetObjCmd(ClientData   clientData,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Interp  *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int          objc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Obj     *const objv[]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylsetObjCmd(ClientData   clientData,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Interp  *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int          objc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Obj     *const objv[]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeyldelObjCmd(ClientData   clientData,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Interp  *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int          objc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Obj     *const objv[]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylkeysObjCmd(ClientData   clientData,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                Tcl_Interp  *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                int          objc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 Tcl_Obj     *const objv[]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Type definition.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_ObjType keyedListType = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "keyedList",              /* name */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    FreeKeyedListInternalRep, /* freeIntRepProc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DupKeyedListInternalRep,  /* dupIntRepProc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UpdateStringOfKeyedList,  /* updateStringProc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SetKeyedListFromAny       /* setFromAnyProc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ValidateKeyedList --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Validate a keyed list (only when TCLX_DEBUG is enabled).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylIntPtr - Keyed list internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCLX_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ValidateKeyedList (keylIntPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert (keylIntPtr->arraySize >= keylIntPtr->numEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert (keylIntPtr->arraySize >= 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert (keylIntPtr->numEntries >= 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert ((keylIntPtr->arraySize > 0) ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 (keylIntPtr->entries != NULL) : TRUE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert ((keylIntPtr->numEntries > 0) ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 (keylIntPtr->entries != NULL) : TRUE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < keylIntPtr->numEntries; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylEntry_t *entryPtr = &(keylIntPtr->entries [idx]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TclX_Assert (entryPtr->key != NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TclX_Assert (entryPtr->valuePtr->refCount >= 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (entryPtr->valuePtr->typePtr == &keyedListType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ValidateKeyedList (entryPtr->valuePtr->internalRep.twoPtrValue.ptr1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ValidateKey --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Check that a key or keypath string is a valid value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Used to return error messages.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - Key string to check.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keyLen - Length of the string, used to check for binary data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o isPath - TRUE if this is a key path, FALSE if its a simple key and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     thus "." is illegal.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    TCL_OK or TCL_ERROR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ValidateKey(interp, key, keyLen, isPath)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t keyLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int isPath;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *keyp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (strlen(key) != keyLen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "keyed list key may not be a ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "binary string", (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (key[0] == '\0') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "keyed list key may not be an ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "empty string", (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (keyp = key; *keyp != '\0'; keyp++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((!isPath) && (*keyp == '.')) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    "keyed list key may not contain a \".\"; ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    "it is used as a separator in key paths",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * AllocKeyedListIntRep --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Allocate an and initialize the keyed list internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A pointer to the keyed list internal structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static keylIntObj_t *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AllocKeyedListIntRep ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = (keylIntObj_t *) ckalloc (sizeof (keylIntObj_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr->arraySize = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr->numEntries = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr->entries = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * FreeKeyedListData --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Free the internal representation of a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylIntPtr - Keyed list internal structure to free.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FreeKeyedListData (keylIntPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < keylIntPtr->numEntries ; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree (keylIntPtr->entries [idx].key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount (keylIntPtr->entries [idx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylIntPtr->entries != NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree ((char *) keylIntPtr->entries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree ((char *) keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * EnsureKeyedListSpace --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Ensure there is enough room in a keyed list array for a certain number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of entries, expanding if necessary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylIntPtr - Keyed list internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o newNumEntries - The number of entries that are going to be added to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     the keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EnsureKeyedListSpace (keylIntPtr, newNumEntries)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int           newNumEntries;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((keylIntPtr->arraySize - keylIntPtr->numEntries) < newNumEntries) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int newSize = keylIntPtr->arraySize + newNumEntries +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            KEYEDLIST_ARRAY_INCR_SIZE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (keylIntPtr->entries == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylIntPtr->entries = (keylEntry_t *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckalloc (newSize * sizeof (keylEntry_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylIntPtr->entries = (keylEntry_t *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckrealloc ((void *) keylIntPtr->entries,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           newSize * sizeof (keylEntry_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->arraySize = newSize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DeleteKeyedListEntry --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Delete an entry from a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylIntPtr - Keyed list internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o entryIdx - Index of entry to delete.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DeleteKeyedListEntry (keylIntPtr, entryIdx)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int           entryIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree (keylIntPtr->entries [entryIdx].key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount (keylIntPtr->entries [entryIdx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = entryIdx; idx < keylIntPtr->numEntries - 1; idx++)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [idx] = keylIntPtr->entries [idx + 1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr->numEntries--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * FindKeyedListEntry --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Find an entry in keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylIntPtr - Keyed list internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - Name of key to search for.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keyLenPtr - In not NULL, the length of the key for this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     level is returned here.  This excludes subkeys and the `.' delimiters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o nextSubKeyPtr - If not NULL, the start of the name of the next
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     sub-key within key is returned.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Index of the entry or -1 if not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FindKeyedListEntry (keylIntPtr, key, keyLenPtr, nextSubKeyPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char   *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          *keyLenPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char   **nextSubKeyPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *keySeparPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int keyLen, findIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keySeparPtr = strchr (key, '.');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keySeparPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keyLen = keySeparPtr - key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keyLen = strlen (key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (findIdx = 0; findIdx < keylIntPtr->numEntries; findIdx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((strncmp (keylIntPtr->entries [findIdx].key, key, keyLen) == 0) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            (keylIntPtr->entries [findIdx].key [keyLen] == '\0'))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nextSubKeyPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (keySeparPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *nextSubKeyPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *nextSubKeyPtr = keySeparPtr + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keyLenPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *keyLenPtr = keyLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (findIdx >= keylIntPtr->numEntries) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return findIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ObjToKeyedListEntry --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Convert an object to a keyed list entry. (Keyword/value pair).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Used to return error messages, if not NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o objPtr - Object to convert.  Each entry must be a two element list,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     with the first element being the key and the second being the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o entryPtr - The keyed list entry to initialize from the object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    TCL_OK or TCL_ERROR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ObjToKeyedListEntry (interp, objPtr, entryPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *objPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylEntry_t *entryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **objv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult (interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendStringsToObj(Tcl_GetObjResult (interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "keyed list entry not a valid list, ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "found \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                Tcl_GetString(objPtr),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "\"", (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendStringsToObj(Tcl_GetObjResult (interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "keyed list entry must be a two ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "element list, found \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                Tcl_GetString(objPtr),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                "\"", (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    key = Tcl_GetString(objv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ValidateKey(interp, key, objv[0]->length, FALSE) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    entryPtr->key = ckstrdup(key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    entryPtr->valuePtr = Tcl_DuplicateObj(objv [1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_IncrRefCount(entryPtr->valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * FreeKeyedListInternalRep --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Free the internal representation of a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylPtr - Keyed list object being deleted.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FreeKeyedListInternalRep (keylPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    FreeKeyedListData(keylPtr->internalRep.twoPtrValue.ptr1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DupKeyedListInternalRep --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Duplicate the internal representation of a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o srcPtr - Keyed list object to copy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o copyPtr - Target object to copy internal representation to.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DupKeyedListInternalRep (srcPtr, copyPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *srcPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *copyPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *srcIntPtr =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        srcPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *copyIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (srcIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr = (keylIntObj_t *) ckalloc (sizeof (keylIntObj_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->arraySize = srcIntPtr->arraySize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->numEntries = srcIntPtr->numEntries;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->entries = (keylEntry_t *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckalloc (copyIntPtr->arraySize * sizeof (keylEntry_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < srcIntPtr->numEntries ; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        copyIntPtr->entries [idx].key =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckstrdup (srcIntPtr->entries [idx].key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        copyIntPtr->entries [idx].valuePtr = srcIntPtr->entries [idx].valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount (copyIntPtr->entries [idx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyPtr->internalRep.twoPtrValue.ptr1 = copyIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyPtr->typePtr = &keyedListType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (copyIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DupKeyedListInternalRepShared --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Same as DupKeyedListInternalRepbut does not reference objects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   from the srcPtr list. It duplicates them and stores the copy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   in the list-copy object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o srcPtr - Keyed list object to copy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o copyPtr - Target object to copy internal representation to.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DupKeyedListInternalRepShared (srcPtr, copyPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *srcPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *copyPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *srcIntPtr =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        srcPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *copyIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (srcIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr = (keylIntObj_t *) ckalloc (sizeof (keylIntObj_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->arraySize = srcIntPtr->arraySize;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->numEntries = srcIntPtr->numEntries;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyIntPtr->entries = (keylEntry_t *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckalloc (copyIntPtr->arraySize * sizeof (keylEntry_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < srcIntPtr->numEntries ; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        copyIntPtr->entries [idx].key =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckstrdup (srcIntPtr->entries [idx].key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        copyIntPtr->entries [idx].valuePtr =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_DuplicateObj (srcIntPtr->entries [idx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount(copyIntPtr->entries [idx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyPtr->internalRep.twoPtrValue.ptr1 = copyIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    copyPtr->typePtr = &keyedListType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (copyIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SetKeyedListFromAny --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Convert an object to a keyed list from its string representation.  Only
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the first level is converted, as there is no way of knowing how far down
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the keyed list recurses until lower levels are accessed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o objPtr - Object to convert to a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SetKeyedListFromAny (interp, objPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *objPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx, objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **objv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_ListObjGetElements (interp, objPtr, &objc, &objv) != TCL_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = AllocKeyedListIntRep ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    EnsureKeyedListSpace (keylIntPtr, objc);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < objc; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ObjToKeyedListEntry (interp, objv [idx],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                &(keylIntPtr->entries [keylIntPtr->numEntries])) != TCL_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto errorExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->numEntries++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objPtr->typePtr != NULL) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (objPtr->typePtr->freeIntRepProc != NULL)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (*objPtr->typePtr->freeIntRepProc) (objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    objPtr->internalRep.twoPtrValue.ptr1 = keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    objPtr->typePtr = &keyedListType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  errorExit:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    FreeKeyedListData (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * UpdateStringOfKeyedList --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Update the string representation of a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o objPtr - Object to convert to a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-UpdateStringOfKeyedList (keylPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj  *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define UPDATE_STATIC_SIZE 32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **listObjv, *entryObjv [2], *tmpListObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *staticListObjv [UPDATE_STATIC_SIZE];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *listStr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Conversion to strings is done via list objects to support binary data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylIntPtr->numEntries > UPDATE_STATIC_SIZE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listObjv =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            (Tcl_Obj **) ckalloc (keylIntPtr->numEntries * sizeof (Tcl_Obj *));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listObjv = staticListObjv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Convert each keyed list entry to a two element list object.  No
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * need to incr/decr ref counts, the list objects will take care of that.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * FIX: Keeping key as string object will speed this up.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < keylIntPtr->numEntries; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        entryObjv [0] =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_NewStringObj(keylIntPtr->entries [idx].key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                              strlen (keylIntPtr->entries [idx].key));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        entryObjv [1] = keylIntPtr->entries [idx].valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listObjv [idx] = Tcl_NewListObj (2, entryObjv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tmpListObj = Tcl_NewListObj (keylIntPtr->numEntries, listObjv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    listStr = Tcl_GetString(tmpListObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr->bytes = ckbinstrdup(listStr, tmpListObj->length);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr->length = tmpListObj->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount (tmpListObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (listObjv != staticListObjv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree ((void*) listObjv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_NewKeyedListObj --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Create and initialize a new keyed list object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A pointer to the object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_Obj *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_NewKeyedListObj ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylPtr = Tcl_NewObj ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr = AllocKeyedListIntRep ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr->internalRep.twoPtrValue.ptr1 = keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr->typePtr = &keyedListType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_KeyedListGet --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Retrieve a key value from a keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Error message will be return in result if there is an error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylPtr - Keyed list object to get key from.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - The name of the key to extract.  Will recusively process sub-keys
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     seperated by `.'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o valueObjPtrPtr - If the key is found, a pointer to the key object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     is returned here.  NULL is returned if the key is not present.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_OK - If the key value was returned.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_BREAK - If the key was not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_ERROR - If an error occured.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_KeyedListGet (interp, keylPtr, key, valuePtrPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj   **valuePtrPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *nextSubKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int findIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr->typePtr != &keyedListType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (SetKeyedListFromAny(interp, keylPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = keylPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    findIdx = FindKeyedListEntry (keylIntPtr, key, NULL, &nextSubKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If not found, return status.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (findIdx < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *valuePtrPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If we are at the last subkey, return the entry, otherwise recurse
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * down looking for the entry.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nextSubKey == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *valuePtrPtr = keylIntPtr->entries [findIdx].valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_KeyedListGet (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  keylIntPtr->entries [findIdx].valuePtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  nextSubKey,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  valuePtrPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_KeyedListSet --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Set a key value in keyed list object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Error message will be return in result object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylPtr - Keyed list object to update.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - The name of the key to extract.  Will recusively process
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     sub-key seperated by `.'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o valueObjPtr - The value to set for the key.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   TCL_OK or TCL_ERROR.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_KeyedListSet (interp, keylPtr, key, valuePtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *nextSubKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int findIdx, keyLen, status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *newKeylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr->typePtr != &keyedListType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (SetKeyedListFromAny(interp, keylPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = keylPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    findIdx = FindKeyedListEntry (keylIntPtr, key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  &keyLen, &nextSubKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If we are at the last subkey, either update or add an entry.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nextSubKey == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (findIdx < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            EnsureKeyedListSpace (keylIntPtr, 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            findIdx = keylIntPtr->numEntries;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylIntPtr->numEntries++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree (keylIntPtr->entries [findIdx].key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (keylIntPtr->entries [findIdx].valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].key =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            (char *) ckalloc (keyLen + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        strncpy (keylIntPtr->entries [findIdx].key, key, keyLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].key [keyLen] = '\0';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].valuePtr = valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount (valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_InvalidateStringRep (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If we are not at the last subkey, recurse down, creating new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * entries if neccessary.  If this level key was not found, it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * means we must build new subtree. Don't insert the new tree until we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * come back without error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (findIdx >= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        DupSharedKeyListChild (keylIntPtr, findIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        status =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TclX_KeyedListSet (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               keylIntPtr->entries [findIdx].valuePtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               nextSubKey, valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (status == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_InvalidateStringRep (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newKeylPtr = TclX_NewKeyedListObj ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (TclX_KeyedListSet (interp, newKeylPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               nextSubKey, valuePtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (newKeylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        EnsureKeyedListSpace (keylIntPtr, 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        findIdx = keylIntPtr->numEntries++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].key =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            (char *) ckalloc (keyLen + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        strncpy (keylIntPtr->entries [findIdx].key, key, keyLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].key [keyLen] = '\0';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylIntPtr->entries [findIdx].valuePtr = newKeylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount (newKeylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_InvalidateStringRep (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_KeyedListDelete --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Delete a key value from keyed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Error message will be return in result if there is an error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylPtr - Keyed list object to update.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - The name of the key to extract.  Will recusively process
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     sub-key seperated by `.'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_OK - If the key was deleted.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_BREAK - If the key was not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_ERROR - If an error occured.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_KeyedListDelete (interp, keylPtr, key)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr, *subKeylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *nextSubKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int findIdx, status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr->typePtr != &keyedListType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (SetKeyedListFromAny(interp, keylPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = keylPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    findIdx = FindKeyedListEntry (keylIntPtr, key, NULL, &nextSubKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If not found, return status.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (findIdx < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If we are at the last subkey, delete the entry.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nextSubKey == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        DeleteKeyedListEntry (keylIntPtr, findIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_InvalidateStringRep (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If we are not at the last subkey, recurse down.  If the entry is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * deleted and the sub-keyed list is empty, delete it as well.  Must
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * invalidate string, as it caches all representations below it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DupSharedKeyListChild (keylIntPtr, findIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    status = TclX_KeyedListDelete (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                   keylIntPtr->entries [findIdx].valuePtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                   nextSubKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (status == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        subKeylIntPtr =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylIntPtr->entries [findIdx].valuePtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (subKeylIntPtr->numEntries == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            DeleteKeyedListEntry (keylIntPtr, findIdx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_InvalidateStringRep (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    KEYL_REP_ASSERT (keylIntPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_KeyedListGetKeys --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Retrieve a list of keyed list keys.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Error message will be return in result if there is an error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o keylPtr - Keyed list object to get key from.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o key - The name of the key to get the sub keys for.  NULL or empty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     to retrieve all top level keys.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o listObjPtrPtr - List object is returned here with key as values.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Returns:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_OK - If the zero or more key where returned.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_BREAK - If the key was not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o TCL_ERROR - If an error occured.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_KeyedListGetKeys (interp, keylPtr, key, listObjPtrPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj   **listObjPtrPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntObj_t *keylIntPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *nameObjPtr, *listObjPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *nextSubKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx, findIdx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr->typePtr != &keyedListType) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (SetKeyedListFromAny(interp, keylPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylIntPtr = keylPtr->internalRep.twoPtrValue.ptr1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If key is not NULL or empty, then recurse down until we go past
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the end of all of the elements of the key.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((key != NULL) && (key [0] != '\0')) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        findIdx = FindKeyedListEntry (keylIntPtr, key, NULL, &nextSubKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (findIdx < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TclX_Assert (keylIntPtr->arraySize >= keylIntPtr->numEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TclX_Assert (keylIntPtr->arraySize >= keylIntPtr->numEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_KeyedListGetKeys (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                      keylIntPtr->entries [findIdx].valuePtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                      nextSubKey,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                      listObjPtrPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Reached the end of the full key, return all keys at this level.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    listObjPtr = Tcl_NewListObj (0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 0; idx < keylIntPtr->numEntries; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nameObjPtr = Tcl_NewStringObj (keylIntPtr->entries [idx].key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                       -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_ListObjAppendElement (interp, listObjPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                      nameObjPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (nameObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (listObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *listObjPtrPtr = listObjPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_Assert (keylIntPtr->arraySize >= keylIntPtr->numEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tcl_KeylgetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     Implements the TCL keylget command:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         keylget listvar ?key? ?retvar | {}?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylgetObjCmd (clientData, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData   clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylPtr, *valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc < 2) || (objc > 4)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_WrongArgs (interp, objv [0],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               "listvar ?key? ?retvar | {}?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle request for list of keys, use keylkeys command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 2)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return Tcl_KeylkeysObjCmd (clientData, interp, objc, objv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, TCL_LEAVE_ERR_MSG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle retrieving a value for a specified key.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    key = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ValidateKey(interp, key, objv[2]->length, TRUE) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    status = TclX_KeyedListGet (interp, keylPtr, key, &valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (status == TCL_ERROR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle key not found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (status == TCL_BREAK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc == 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TclX_AppendObjResult (interp, "key \"",  key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  "\" not found in keyed list",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetBooleanObj (Tcl_GetObjResult (interp), FALSE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * No variable specified, so return value in the result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult (interp, valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Variable (or empty variable name) specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!TclX_IsNullObj(objv [3])) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_ObjSetVar2(interp, objv[3], NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          valuePtr, TCL_LEAVE_ERR_MSG) == NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetBooleanObj (Tcl_GetObjResult (interp), TRUE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tcl_KeylsetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     Implements the TCL keylset command:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         keylset listvar key value ?key value...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylsetObjCmd (clientData, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData   clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylVarPtr, *newVarObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc < 4) || ((objc % 2) != 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_WrongArgs (interp, objv [0],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               "listvar key value ?key value...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Get the variable that we are going to update.  If the var doesn't exist,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * create it.  If it is shared by more than being a variable, duplicated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylVarPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((keylVarPtr == NULL) || (Tcl_IsShared (keylVarPtr))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (keylVarPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylVarPtr = TclX_NewKeyedListObj ();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            keylVarPtr = Tcl_DuplicateObj (keylVarPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newVarObj = keylVarPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newVarObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 2; idx < objc; idx += 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[idx]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ValidateKey(interp, key, objv[idx]->length, TRUE) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto errorExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (TclX_KeyedListSet (interp, keylVarPtr, key, objv [idx+1]) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto errorExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_ObjSetVar2(interp, objv[1], NULL, keylVarPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                      TCL_LEAVE_ERR_MSG) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto errorExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  errorExit:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (newVarObj != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount (newVarObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tcl_KeyldelObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     Implements the TCL keyldel command:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         keyldel listvar key ?key ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeyldelObjCmd (clientData, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData   clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylVarPtr, *keylPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idx, status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_WrongArgs (interp, objv [0], "listvar key ?key ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Get the variable that we are going to update.  If it is shared by more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * than being a variable, duplicated it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylVarPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, TCL_LEAVE_ERR_MSG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylVarPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsShared (keylVarPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylPtr = Tcl_DuplicateObj (keylVarPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        keylVarPtr = Tcl_ObjSetVar2(interp, objv[1], NULL, keylPtr, TCL_LEAVE_ERR_MSG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (keylVarPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (keylVarPtr != keylPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount (keylPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr = keylVarPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (idx = 2; idx < objc; idx++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[idx]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ValidateKey(interp, key, objv[idx]->length, TRUE) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        status = TclX_KeyedListDelete (interp, keylPtr, key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch (status) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          case TCL_BREAK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TclX_AppendObjResult (interp, "key not found: \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                  key, "\"", (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tcl_KeylkeysObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     Implements the TCL keylkeys command:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         keylkeys listvar ?key?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_KeylkeysObjCmd (clientData, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData   clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int          objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj     *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *keylPtr, *listObjPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc < 2) || (objc > 3)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TclX_WrongArgs(interp, objv [0], "listvar ?key?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    keylPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, TCL_LEAVE_ERR_MSG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (keylPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If key argument is not specified, then objv [2] is NULL or empty,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * meaning get top level keys.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ValidateKey(interp, key, objv[2]->length, TRUE) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    status = TclX_KeyedListGetKeys (interp, keylPtr, key, &listObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (status) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      case TCL_BREAK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TclX_AppendObjResult (interp, "key not found: \"", key, "\"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                              (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult (interp, listObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TclX_KeyedListInit --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   Initialize the keyed list commands for this interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Parameters:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   o interp - Interpreter to add commands to.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TclX_KeyedListInit (interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *listobj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_RegisterObjType(&keyedListType);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    listobj = Tcl_NewObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    listobj = Tcl_NewListObj(1, &listobj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    listType = listobj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(listobj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateObjCommand (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          "keylget",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          Tcl_KeylgetObjCmd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (ClientData) NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (Tcl_CmdDeleteProc*) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateObjCommand (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          "keylset",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          Tcl_KeylsetObjCmd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (ClientData) NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (Tcl_CmdDeleteProc*) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateObjCommand (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          "keyldel",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          Tcl_KeyldelObjCmd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (ClientData) NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (Tcl_CmdDeleteProc*) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateObjCommand (interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          "keylkeys",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          Tcl_KeylkeysObjCmd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (ClientData) NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                          (Tcl_CmdDeleteProc*) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/tclXkeylist.h b/vendor/thread2.7.3/generic/tclXkeylist.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 8abfac9f8..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/tclXkeylist.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,52 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * tclXkeylist.h --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Extended Tcl keyed list commands and interfaces.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright 1991-1999 Karl Lehenbauer and Mark Diekhans.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Permission to use, copy, modify, and distribute this software and its
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * documentation for any purpose and without fee is hereby granted, provided
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * that the above copyright notice appear in all copies.  Karl Lehenbauer and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Mark Diekhans make no representations about the suitability of this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * software for any purpose.  It is provided "as is" without express or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * implied warranty.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _KEYLIST_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _KEYLIST_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Keyed list object interface commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE Tcl_Obj* TclX_NewKeyedListObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void TclX_KeyedListInit(Tcl_Interp*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  TclX_KeyedListGet(Tcl_Interp*, Tcl_Obj*, const char*, Tcl_Obj**);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  TclX_KeyedListSet(Tcl_Interp*, Tcl_Obj*, const char*, Tcl_Obj*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  TclX_KeyedListDelete(Tcl_Interp*, Tcl_Obj*, const char*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  TclX_KeyedListGetKeys(Tcl_Interp*, Tcl_Obj*, const char*, Tcl_Obj**);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Exported for usage in Sv_DuplicateObj. This is slightly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * modified version of the DupKeyedListInternalRep() function.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * It does a proper deep-copy of the keyed list object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void DupKeyedListInternalRepShared(Tcl_Obj*, Tcl_Obj*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _KEYLIST_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: tclXkeylist.h,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadCmd.c b/vendor/thread2.7.3/generic/threadCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0d04fecb4..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3906 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadCmd.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements the Tcl thread commands that allow script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * level access to threading. It will not load into a core that was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * not compiled for thread support.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See http://www.tcl.tk/doc/howto/thread_model.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Some of this code is based on work done by Richard Hipp on behalf of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Conservation Through Innovation, Limited, with their permission.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1998 by Sun Microsystems, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1999,2000 by Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Provide package version in build contexts which do not provide
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * -DPACKAGE_VERSION, like building a shell with the Thread object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * files built as part of that shell. Example: basekits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef PACKAGE_VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PACKAGE_VERSION "2.7.3"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Check if this is Tcl 8.5 or higher.  In that case, we will have the TIP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * #143 APIs (i.e. interpreter resource limiting) available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef TCL_TIP143
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if TCL_MINIMUM_VERSION(8,5)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define TCL_TIP143
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * If TIP #143 support is enabled and we are compiling against a pre-Tcl 8.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * core, hard-wire the necessary APIs using the "well-known" offsets into the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * stubs table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define haveInterpLimit (threadTclVersion>=85)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(TCL_TIP143) && !TCL_MINIMUM_VERSION(8,5)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if defined(USE_TCL_STUBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define Tcl_LimitExceeded ((int (*)(Tcl_Interp *)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ((&(tclStubsPtr->tcl_PkgProvideEx))[524]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  error "Supporting TIP #143 requires USE_TCL_STUBS before Tcl 8.5"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Check if this is Tcl 8.6 or higher.  In that case, we will have the TIP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * #285 APIs (i.e. asynchronous script cancellation) available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define haveInterpCancel (threadTclVersion>=86)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if TCL_MINIMUM_VERSION(8,6)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * If TIP #285 support is enabled and we are compiling against a pre-Tcl 8.6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * core, hard-wire the necessary APIs using the "well-known" offsets into the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * stubs table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(TCL_TIP285) && !TCL_MINIMUM_VERSION(8,6)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if defined(USE_TCL_STUBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define TCL_CANCEL_UNWIND        0x100000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define Tcl_CancelEval ((int (*)(Tcl_Interp *, Tcl_Obj *, ClientData, int)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ((&(tclStubsPtr->tcl_PkgProvideEx))[580]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  define Tcl_Canceled ((int (*)(Tcl_Interp *, int)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     ((&(tclStubsPtr->tcl_PkgProvideEx))[581]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  error "Supporting TIP #285 requires USE_TCL_STUBS before Tcl 8.6"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Access to the list of threads and to the thread send results
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * (defined below) is guarded by this mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_DECLARE_MUTEX(threadMutex)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Each thread has an single instance of the following structure. There
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * is one instance of this structure per thread even if that thread contains
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * multiple interpreters. The interpreter identified by this structure is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the main interpreter for the thread. The main interpreter is the one that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * will process any messages received by a thread. Any interpreter can send
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * messages but only the main interpreter can receive them, unless you're
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * not doing asynchronous script backfiring. In such cases the caller might
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * signal the thread to which interpreter the result should be delivered.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadSpecificData {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId threadId;                /* The real ID of this thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                   /* Main interp for this thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition doOneEvent;             /* Signalled just before running
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                             an event from the event loop */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int flags;                            /* One of the ThreadFlags below */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int refCount;                         /* Used for thread reservation */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int eventsPending;                    /* # of unprocessed events */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int maxEventsCount;                   /* Maximum # of pending events */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadEventResult  *result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadSpecificData *nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadSpecificData *prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadSpecificData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadDataKey dataKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_FLAGS_NONE          0      /* None */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_FLAGS_STOPPED       1      /* Thread is being stopped */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_FLAGS_INERROR       2      /* Thread is in error */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_FLAGS_UNWINDONERROR 4      /* Thread unwinds on script error */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_RESERVE             1      /* Reserves the thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_RELEASE             2      /* Releases the thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Length of storage for building the Tcl handle for the thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_HNDLPREFIX  "tid"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_HNDLMAXLEN  32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This list is used to list all threads that have interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static struct ThreadSpecificData *threadList = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Used to represent the empty result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *threadEmptyResult = (char *)"";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int threadTclVersion = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * An instance of the following structure contains all information that is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * passed into a new thread when the thread is created using either the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * "thread create" Tcl command or the ThreadCreate() C function.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadCtrl {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *script;                         /* Script to execute */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int flags;                            /* Initial value of the "flags"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                           * field in ThreadSpecificData */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition condWait;               /* Condition variable used to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                           * sync parent and child threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData cd;                        /* Opaque ptr to pass to thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadCtrl;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure holding result of the command executed in target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadEventResult {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition done;                   /* Set when the script completes */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code;                             /* Return value of the function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *result;                         /* Result from the function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *errorInfo;                      /* Copy of errorInfo variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *errorCode;                      /* Copy of errorCode variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId srcThreadId;             /* Id of sender, if it dies */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId dstThreadId;             /* Id of target, if it dies */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadEvent *eventPtr;         /* Back pointer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadEventResult *nextPtr;    /* List for cleanup */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadEventResult *prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadEventResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This list links all active ThreadEventResult structures. This way
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * an exiting thread can inform all threads waiting on jobs posted to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * his event queue that it is dying, so they might stop waiting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadEventResult *resultList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is the event used to send commands to other threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadEvent {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event event;                      /* Must be first */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadSendData *sendData;      /* See below */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadClbkData *clbkData;      /* See below */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadEventResult *resultPtr;  /* To communicate the result back.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                           * NULL if we don't care about it */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadEvent;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int  (ThreadSendProc) (Tcl_Interp*, ClientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef void (ThreadSendFree) (ClientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadSendProc ThreadSendEval;     /* Does a regular Tcl_Eval */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadSendProc ThreadClbkSetVar;   /* Sets the named variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * These structures are used to communicate commands between source and target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threads. The ThreadSendData is used for source->target command passing,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * while the ThreadClbkData is used for doing asynchronous callbacks.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Important: structures below must have first three elements identical!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadSendData {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendProc *execProc;             /* Func to exec in remote thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;                /* Ptr to pass to send function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendFree *freeProc;             /* Function to free client data */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /* ---- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                   /* Interp to run the command */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadSendData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadClbkData {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendProc *execProc;             /* The callback function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;                /* Ptr to pass to clbk function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendFree *freeProc;             /* Function to free client data */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* ---- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                   /* Interp to run the command */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId threadId;                /* Thread where to post callback */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult result;             /* Returns result asynchronously */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadClbkData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Event used to transfer a channel between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct TransferEvent {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event event;                      /* Must be first */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan;                     /* The channel to transfer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TransferResult *resultPtr;     /* To communicate the result */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} TransferEvent;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct TransferResult {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition done;                   /* Set when transfer is done */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int resultCode;                       /* Set to TCL_OK or TCL_ERROR when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                             the transfer is done. Def = -1 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *resultMsg;                      /* Initialized to NULL. Set to a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                             allocated string by the target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                             thread in case of an error  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId srcThreadId;             /* Id of src thread, if it dies */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId dstThreadId;             /* Id of tgt thread, if it dies */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TransferEvent *eventPtr;       /* Back pointer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TransferResult *nextPtr;       /* Next in the linked list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TransferResult *prevPtr;       /* Previous in the linked list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} TransferResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static TransferResult *transferList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is for simple error handling when a thread script exits badly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadId errorThreadId; /* Id of thread to post error message */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *errorProcString;      /* Tcl script to run when reporting error */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Definition of flags for ThreadSend.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_SEND_WAIT 1<<1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_SEND_HEAD 1<<2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define THREAD_SEND_CLBK 1<<3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef BUILD_thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# undef  TCL_STORAGE_CLASS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TCL_STORAGE_CLASS DLLEXPORT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Miscellaneous functions used within this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_EventDeleteProc ThreadDeleteEvent;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadCreateType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NewThread(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadSpecificData*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExistsInner(Tcl_ThreadId id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadInit(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCreate(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               const char *script,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int stacksize,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int flags,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int preserve);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSend(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               ThreadSendData *sendPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               ThreadClbkData *clbkPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSetResult(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int code,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               ThreadEventResult *resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetOption(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               char *option,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_DString *ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSetOption(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               char *option,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               char *value);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadReserve(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int operation,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int wait);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadEventProc(Tcl_Event *evPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int mask);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadWait(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExists(Tcl_ThreadId id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadList(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId **thrIdArray);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadErrorProc(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadFreeProc(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadIdleProc(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExitProc(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadFreeError(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListRemove(ThreadSpecificData *tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListRemoveInner(ThreadSpecificData *tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListUpdate(ThreadSpecificData *tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListUpdateInner(ThreadSpecificData *tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadJoin(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadTransfer(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Channel chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadDetach(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Channel chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadAttach(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               char *chanName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TransferEventProc(Tcl_Event *evPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int mask);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetHandle(Tcl_ThreadId,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               char *handlePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetId(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Obj *handleObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId *thrIdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ErrorNoSuchThread(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCutChannel(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_Channel channel);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCancel(Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Tcl_ThreadId thrId,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               const char *result,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Functions implementing Tcl commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadCreateObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadReserveObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadReleaseObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadSendObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadBroadcastObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadUnwindObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadExitObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadIdObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadNamesObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadWaitObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadExistsObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadConfigureObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadErrorProcObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadJoinObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadTransferObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadDetachObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadAttachObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadCancelObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadInit(interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp; /* The current Tcl interpreter */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_InitStubs(interp, "8.4", 0) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if ((sizeof(size_t) != sizeof(int)) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           !Tcl_InitStubs(interp, "8.4-", 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!threadTclVersion) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Check whether we are running threaded Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Get the current core version to decide whether to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * some lately introduced core features or to back-off.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int major, minor;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (threadMutex == NULL){
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       /* If threadMutex==NULL here, it means that Tcl_MutexLock() is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        * a dummy function, which is the case in unthreaded Tcl */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       const char *msg = "Tcl core wasn't compiled for threading";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Tcl_SetObjResult(interp, Tcl_NewStringObj(msg, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_GetVersion(&major, &minor, NULL, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   threadTclVersion = 10 * major + minor;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"create",    ThreadCreateObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"send",      ThreadSendObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"broadcast", ThreadBroadcastObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"exit",      ThreadExitObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"unwind",    ThreadUnwindObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"id",        ThreadIdObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"names",     ThreadNamesObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"exists",    ThreadExistsObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"wait",      ThreadWaitObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"configure", ThreadConfigureObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"errorproc", ThreadErrorProcObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"preserve",  ThreadReserveObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"release",   ThreadReleaseObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"join",      ThreadJoinObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"transfer",  ThreadTransferObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"detach",    ThreadDetachObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"attach",    ThreadAttachObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"cancel",    ThreadCancelObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Add shared variable commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sv_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Add commands to access thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * synchronization primitives.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Add threadpool commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tpool_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Thread_Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Initialize the thread commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  TCL_OK if the package was properly initialized.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Adds package commands to the current interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DLLEXPORT int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread_Init(interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp; /* The current Tcl interpreter */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int status = ThreadInit(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (status != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return status;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Tcl_PkgProvideEx(interp, "Thread", PACKAGE_VERSION, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Make sure internal list of threads references the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The list of threads is initialized to include the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Init(interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr->interp == (Tcl_Interp*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        memset(tsdPtr, 0, sizeof(ThreadSpecificData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->interp = interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ListUpdate(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_CreateThreadExitHandler(ThreadExitProc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    (ClientData)threadEmptyResult);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadCreateObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::create" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCreateObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int argc, rsrv = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *arg, *script;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int flags = TCL_THREAD_NOFLAGS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: thread::create ?-joinable? ?-preserved? ?script?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    script = THREAD_CMD_PREFIX"wait";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (argc = 1; argc < objc; argc++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        arg = Tcl_GetString(objv[argc]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (OPT_CMP(arg, "--")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            argc++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if ((argc + 1) == objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                script = Tcl_GetString(objv[argc]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(arg, "-joinable")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            flags |= TCL_THREAD_JOINABLE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(arg, "-preserved")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rsrv = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if ((argc + 1) == objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            script = Tcl_GetString(objv[argc]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadCreate(interp, script, TCL_THREAD_STACK_DEFAULT, flags, rsrv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WrongNumArgs(interp, 1, objv, "?-joinable? ?script?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadReserveObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::preserve" and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  "thread::release" Tcl commands, depending on the flag passed by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  the ClientData argument. See the user documentation for details
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  on what those command do.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadReserveObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "?threadId?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadReserve(interp, thrId, THREAD_RESERVE, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadReleaseObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::release" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadReleaseObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;           /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int wait = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "?-wait? ?threadId?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (OPT_CMP(Tcl_GetString(objv[1]), "-wait")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            wait = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (ThreadGetId(interp, objv[2], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadReserve(interp, thrId, THREAD_RELEASE, wait);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadUnwindObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::unwind" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadUnwindObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadReserve(interp, 0, THREAD_RELEASE, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadExitObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::exit" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command.  This causes an unconditional close of the thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  and is GUARANTEED to cause memory leaks.  Use this with caution.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Doesn't actually return.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Lots.  improper clean up of resources.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExitObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListRemove(NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ExitThread(666);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK; /* NOT REACHED */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadIdObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::id" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This returns the ID of the current thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadIdObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char thrHandle[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadGetHandle(Tcl_GetCurrentThread(), thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(thrHandle, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadNamesObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::names" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. This returns a list of all known thread IDs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  These are only threads created via this module (e.g., not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  driver threads or the notifier).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadNamesObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *result, thrHandle[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId *thrIdArray;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DString threadNames;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    length = ThreadList(interp, &thrIdArray);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (length == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DStringInit(&threadNames);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 0; ii < length; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadGetHandle(thrIdArray[ii], thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringAppendElement(&threadNames, thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    length = Tcl_DStringLength(&threadNames);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = Tcl_DStringValue(&threadNames);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(result, length));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DStringFree(&threadNames);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)thrIdArray);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadSendObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::send" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. This sends a script to another thread for execution.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-threadSendFree(ClientData ptr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ckfree((char *)ptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSendObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t len, vlen = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, ii = 0, flags = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *script, *arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *var = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadClbkData *clbkPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *sendPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: thread::send ?-async? ?-head? threadId script ?varName?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3 || objc > 6) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flags = THREAD_SEND_WAIT;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 1; ii < objc; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        arg = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (OPT_CMP(arg, "-async")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            flags &= ~THREAD_SEND_WAIT;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(arg, "-head")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            flags |= THREAD_SEND_HEAD;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ii >= objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[ii], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (++ii >= objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    script = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    len = objv[ii]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (++ii < objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        var = objv[ii];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        vlen = objv[ii]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (var && (flags & THREAD_SEND_WAIT) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (thrId == Tcl_GetCurrentThread()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * FIXME: Do something for callbacks to self
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewStringObj("can't notify self", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Prepare record for the callback. This is asynchronously
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * posted back to us when the target thread finishes processing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We should do a vwait on the "var" to get notified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr = (ThreadClbkData*)ckalloc(sizeof(ThreadClbkData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr->execProc   = ThreadClbkSetVar;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr->freeProc   = threadSendFree;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr->interp     = interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr->threadId   = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        clbkPtr->clientData = (ClientData)strcpy(ckalloc(1+vlen), Tcl_GetString(var));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Prepare job record for the target thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sendPtr = (ThreadSendData*)ckalloc(sizeof(ThreadSendData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sendPtr->interp     = NULL; /* Signal to use thread main interp */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sendPtr->execProc   = ThreadSendEval;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sendPtr->freeProc   = threadSendFree;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sendPtr->clientData = (ClientData)strcpy(ckalloc(1+len), script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = ThreadSend(interp, thrId, sendPtr, clbkPtr, flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (var && (flags & THREAD_SEND_WAIT)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Leave job's result in passed variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * and return the code, like "catch" does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Obj *resultObj = Tcl_GetObjResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!Tcl_ObjSetVar2(interp, var, NULL, resultObj, TCL_LEAVE_ERR_MSG)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WrongNumArgs(interp,1,objv,"?-async? ?-head? id script ?varName?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadBroadcastObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::broadcast" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. This asynchronously sends a script to all known threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Script is sent to all known threads except the caller thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadBroadcastObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, nthreads;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *script;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId *thrIdArray;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *sendPtr, job;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "script");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    script = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    len = objv[1]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Get the list of known threads. Note that this one may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * actually change (thread may exit or otherwise cease to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * exist) while we circle in the loop below. We really do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * not care about that here since we don't return any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * script results to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nthreads = ThreadList(interp, &thrIdArray);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nthreads == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Prepare the structure with the job description
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * to be sent asynchronously to each known thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    job.interp     = NULL; /* Signal to use thread's main interp */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    job.execProc   = ThreadSendEval;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    job.freeProc   = threadSendFree;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    job.clientData = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Now, circle this list and send each thread the script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * This is sent asynchronously, since we do not care what
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * are they going to do with it. Also, the event is queued
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * to the head of the event queue (as out-of-band message).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 0; ii < nthreads; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (thrIdArray[ii] == Tcl_GetCurrentThread()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            continue; /* Do not broadcast self */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr  = (ThreadSendData*)ckalloc(sizeof(ThreadSendData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *sendPtr = job;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr->clientData = (ClientData)strcpy(ckalloc(1+len), script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSend(interp, thrIdArray[ii], sendPtr, NULL, THREAD_SEND_HEAD);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)thrIdArray);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadWaitObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::wait" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. This enters the event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Enters the event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadWaitObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadWait(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadErrorProcObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::errorproc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. This registers a procedure to handle thread errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Empty string as the name of the procedure will reset the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  default behaviour, which is writing to standard error channel.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Registers an errorproc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadErrorProcObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *proc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "?proc?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errorProcString) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewStringObj(errorProcString, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errorProcString) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(errorProcString);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        proc = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        len = objv[1]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       errorThreadId = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorProcString = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       errorThreadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorProcString = ckalloc(1+strlen(proc));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy(errorProcString, proc);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Tcl_DeleteThreadExitHandler(ThreadFreeError, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Tcl_CreateThreadExitHandler(ThreadFreeError, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadFreeError(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (errorThreadId != Tcl_GetCurrentThread()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree(errorProcString);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    errorThreadId = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    errorProcString = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadJoinObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::join" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadJoinObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax of 'join': id
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "id");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadJoin(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadTransferObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::transfer" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadTransferObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax of 'transfer': id channel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "id channel");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    chan = Tcl_GetChannel(interp, Tcl_GetString(objv[2]), NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (chan == (Tcl_Channel)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadTransfer(interp, thrId, Tcl_GetTopChannel(chan));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadDetachObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::detach" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadDetachObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: thread::detach channel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "channel");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    chan = Tcl_GetChannel(interp, Tcl_GetString(objv[1]), NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (chan == (Tcl_Channel)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadDetach(interp, Tcl_GetTopChannel(chan));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadAttachObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::attach" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadAttachObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *chanName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: thread::attach channel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "channel");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    chanName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsChannelExisting(chanName)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadAttach(interp, chanName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadExistsObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::exists" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExistsObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "id");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetIntObj(Tcl_GetObjResult(interp), ThreadExists(thrId)!=0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadConfigureObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This procedure is invoked to process the Tcl "thread::configure"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadConfigureObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *option, *value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;         /* Id of the thread to configure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i;                      /* Iterate over arg-value pairs. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DString ds;                            /* DString to hold result of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 * calling GetThreadOption. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2 || (objc % 2 == 1 && objc != 3)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "threadlId ?optionName? "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "?value? ?optionName value?...");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[1], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringInit(&ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ThreadGetOption(interp, thrId, NULL, &ds) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DStringFree(&ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringResult(interp, &ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringInit(&ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        option = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ThreadGetOption(interp, thrId, option, &ds) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DStringFree(&ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringResult(interp, &ds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 3; i < objc; i += 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        option = Tcl_GetString(objv[i-1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        value  = Tcl_GetString(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ThreadSetOption(interp, thrId, option, value) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadCancelObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "thread::cancel" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCancelObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, flags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc < 2) || (objc > 4)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "?-unwind? id ?result?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flags = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ii = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc == 3) || (objc == 4)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (OPT_CMP(Tcl_GetString(objv[ii]), "-unwind")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            flags |= TCL_CANCEL_UNWIND;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ii++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadGetId(interp, objv[ii], &thrId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ii++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ii < objc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ThreadCancel(interp, thrId, result, flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadSendEval --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Evaluates Tcl script passed from source to target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSendEval(interp, clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *sendPtr = (ThreadSendData*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *script = (char*)sendPtr->clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Tcl_EvalEx(interp, script, -1, TCL_EVAL_GLOBAL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadClbkSetVar --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Sets the Tcl variable in the source thread, as the result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  of the asynchronous callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  New Tcl variable may be created
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadClbkSetVar(interp, clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadClbkData *clbkPtr = (ThreadClbkData*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *var = (const char *)clbkPtr->clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *valObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult *resultPtr = &clbkPtr->result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Get the result of the posted command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * We will use it to fill-in the result variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    valObj = Tcl_NewStringObj(resultPtr->result, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->result != threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(resultPtr->result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Set the result variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_SetVar2Ex(interp, var, NULL, valObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                      TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * In case of error, trigger the bgerror mechansim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->code == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->errorCode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            var = "errorCode";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetVar2Ex(interp, var, NULL, Tcl_NewStringObj(resultPtr->errorCode, -1), TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)resultPtr->errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->errorInfo) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            var = "errorInfo";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetVar2Ex(interp, var, NULL, Tcl_NewStringObj(resultPtr->errorInfo, -1), TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)resultPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, valObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_BackgroundError(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadCreate --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to create a thread containing an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  interp to run a script. This returns after the thread has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  started executing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result, which is the thread ID.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Create a thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCreate(interp, script, stacksize, flags, preserve)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *script;         /* Script to evaluate */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         stacksize;      /* Zero for default size */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         flags;          /* Zero for no flags */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         preserve;       /* If true, reserve the thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char thrHandle[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadCtrl ctrl;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ctrl.cd = Tcl_GetAssocData(interp, "thread:nsd", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ctrl.script   = (char *)script;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ctrl.condWait = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ctrl.flags    = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_CreateThread(&thrId, NewThread, (ClientData)&ctrl,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            stacksize, flags) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("can't create a new thread", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wait for the thread to start because it is using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the ThreadCtrl argument which is on our stack.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (ctrl.script != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&ctrl.condWait, &threadMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (preserve) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSpecificData *tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr == (ThreadSpecificData*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionFinalize(&ctrl.condWait);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->refCount++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionFinalize(&ctrl.condWait);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadGetHandle(thrId, thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(thrHandle, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * NewThread --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This routine is the "main()" for a new thread whose task is to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    execute a single TCL script. The argument to this function is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    a pointer to a structure that contains the text of the Tcl script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    to be executed, plus some synchronization primitives. Those are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    used so the caller gets signalized when the new thread has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    done its initialization.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Space to hold the ThreadControl structure itself is reserved on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    the stack of the calling function. The two condition variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    in the ThreadControl structure are destroyed by the calling
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    function as well. The calling function will destroy the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    ThreadControl structure and the condition variable as soon as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    ctrlPtr->condWait is signaled, so this routine must make copies
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    of any data it might need after that point.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A Tcl script is executed in a new thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_ThreadCreateType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NewThread(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadCtrl *ctrlPtr = (ThreadCtrl *)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int result = TCL_OK, scriptLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *evalScript;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the interpreter. The bad thing here is that we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * assume that initialization of the Tcl interp will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * error free, which it may not. In the future we must recover
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * from this and exit gracefully (this is not that easy as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * it seems on the first glance...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    NsThreadInterpData *md = (NsThreadInterpData *)ctrlPtr->cd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Ns_ThreadSetName("-tclthread-");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    interp = (Tcl_Interp*)Ns_TclAllocateInterp(md ? md->server : NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    interp = Tcl_CreateInterp();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = Tcl_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !defined(NS_AOLSERVER) || (defined(NS_MAJOR_VERSION) && NS_MAJOR_VERSION >= 4)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = Thread_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr->interp = interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Update the list of threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListUpdateInner(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * We need to keep a pointer to the alloc'ed mem of the script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * we are eval'ing, for the case that we exit during evaluation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    scriptLen = strlen(ctrlPtr->script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evalScript = strcpy((char*)ckalloc(scriptLen+1), ctrlPtr->script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateThreadExitHandler(ThreadExitProc,(ClientData)evalScript);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Notify the parent we are alive.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ctrlPtr->script = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionNotify(&ctrlPtr->condWait);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Run the script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Preserve((ClientData)tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = Tcl_EvalEx(tsdPtr->interp, evalScript,scriptLen,TCL_EVAL_GLOBAL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (result != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadErrorProc(tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Clean up. Note: add something like TlistRemove for the transfer list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr->doOneEvent) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionFinalize(&tsdPtr->doOneEvent);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListRemove(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * It is up to all other extensions, including Tk, to be responsible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * for their own events when they receive their Tcl_CallWhenDeleted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * notice when we delete this interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Ns_TclMarkForDelete(tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Ns_TclDeAllocateInterp(tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteInterp(tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Release((ClientData)tsdPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*tsdPtr->interp = NULL;*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tcl_ExitThread calls Tcl_FinalizeThread() indirectly which calls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * ThreadExitHandlers and cleans the notifier as well as other sub-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * systems that save thread state data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ExitThread(result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_THREAD_CREATE_RETURN;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadErrorProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Send a message to the thread willing to hear about errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Send an event.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadErrorProc(interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Interp that failed */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *sendPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *argv[3];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char buf[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *errorInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    errorInfo = Tcl_GetVar2(interp, "errorInfo", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (errorInfo == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorInfo = "";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (errorProcString == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Ns_Log(Error, "%s\n%s", Tcl_GetString(Tcl_GetObjResult(interp)), errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Channel errChannel = Tcl_GetStdChannel(TCL_STDERR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errChannel == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* Fixes the [#634845] bug; credits to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Wojciech Kocjan <wojciech@kocjan.org> */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadGetHandle(Tcl_GetCurrentThread(), buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WriteChars(errChannel, "Error from thread ", -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WriteChars(errChannel, buf, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WriteChars(errChannel, "\n", 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WriteChars(errChannel, errorInfo, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WriteChars(errChannel, "\n", 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadGetHandle(Tcl_GetCurrentThread(), buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        argv[0] = errorProcString;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        argv[1] = buf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        argv[2] = errorInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr = (ThreadSendData*)ckalloc(sizeof(ThreadSendData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr->execProc   = ThreadSendEval;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr->freeProc   = threadSendFree;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr->clientData = (ClientData) Tcl_Merge(3, argv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sendPtr->interp     = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSend(interp, errorThreadId, sendPtr, NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ListUpdate --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Add the thread local storage to the list. This grabs the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  mutex to protect the list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListUpdate(tsdPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListUpdateInner(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ListUpdateInner --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Add the thread local storage to the list. This assumes the caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  has obtained the threadMutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Add the thread local storage to its list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListUpdateInner(tsdPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (threadList) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        threadList->prevPtr = tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr->nextPtr  = threadList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr->prevPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr->threadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    threadList = tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ListRemove --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Remove the thread local storage from its list. This grabs the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  mutex to protect the list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Remove the thread local storage from its list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListRemove(tsdPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListRemoveInner(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ListRemoveInner --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Remove the thread local storage from its list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Remove the thread local storage from its list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ListRemoveInner(tsdPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr->prevPtr || tsdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr->prevPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->prevPtr->nextPtr = tsdPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            threadList = tsdPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->nextPtr->prevPtr = tsdPtr->prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->prevPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (tsdPtr == threadList) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        threadList = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadList --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Return a list of threads running Tcl interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Number of threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadList(interp, thrIdArray)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId **thrIdArray;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, count = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * First walk; find out how many threads are registered.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * We may avoid this and gain some speed by maintaining
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the counter of allocated structs in the threadList.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tsdPtr = threadList; tsdPtr; tsdPtr = tsdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        count++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (count == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate storage for passing thread id's to caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *thrIdArray = (Tcl_ThreadId*)ckalloc(count * sizeof(Tcl_ThreadId));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Second walk; fill-in the array with thread ID's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tsdPtr = threadList, ii = 0; tsdPtr; tsdPtr = tsdPtr->nextPtr, ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (*thrIdArray)[ii] = tsdPtr->threadId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return count;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadExists --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Test whether a thread given by it's id is known to us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pointer to thread specific data structure or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  NULL if no thread with given ID found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExists(thrId)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return tsdPtr != NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadExistsInner --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Test whether a thread given by it's id is known to us. Assumes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  caller holds the thread mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pointer to thread specific data structure or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  NULL if no thread with given ID found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadSpecificData *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExistsInner(thrId)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;              /* Thread id to look for. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tsdPtr = threadList; tsdPtr; tsdPtr = tsdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr->threadId == thrId) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadCancel --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Cancels a script in another thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCancel(interp, thrId, result, flags)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;        /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;         /* Thread ID of other interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *result;         /* The error message or NULL for default. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int flags;                  /* Flags for Tcl_CancelEval. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *resultObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr; /* ... of the target thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == (ThreadSpecificData*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!haveInterpCancel) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "not supported with this Tcl version", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (result != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultObj = Tcl_NewStringObj(result, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    code = Tcl_CancelEval(tsdPtr->interp, resultObj, NULL, flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadJoin --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Wait for the exit of a different thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The status of the exiting thread is left in the interp result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  area, but only in the case of success.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadJoin(interp, thrId)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp  *interp;        /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;         /* Thread ID of other interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, state;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_JoinThread(thrId, &state);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetIntObj(Tcl_GetObjResult (interp), state);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char thrHandle[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadGetHandle(thrId, thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "cannot join thread ", thrHandle, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadTransfer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Transfers the specified channel which must not be shared and has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to be registered in the given interp from that location to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  main interp of the specified thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Thanks to Anreas Kupries for the initial implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The thread-global lists of all known channels of both threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  involved (specified and current) are modified. The channel is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  moved, all event handling for the channel is killed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadTransfer(interp, thrId, chan)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;         /* Thread Id of other interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel  chan;          /* The channel to transfer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* Steps to perform for the transfer:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * i.   Sanity checks: chan has to registered in interp, must not be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      shared. This automatically excludes the special channels for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      stdin, stdout and stderr!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * ii.  Clear event handling.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * iii. Bump reference counter up to prevent destruction during the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      following unregister, then unregister the channel from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      interp. Remove it from the thread-global list of all channels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * iv.  Wrap the channel into an event and send that to the other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      thread, then wait for the other thread to process our message.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * v.   The event procedure called by the other thread is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      'TransferEventProc'. It links the channel into the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      thread-global list of channels for that thread, registers it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      in the main interp of the other thread, removes the artificial
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      reference, at last notifies this thread of the sucessful
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *      transfer. This allows this thread then to proceed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferEvent *evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferResult *resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!Tcl_IsChannelRegistered(interp, chan)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("channel is not registered here", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsChannelShared(chan)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("channel is shared", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Short circuit transfers to ourself.  Nothing to do.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (thrId == Tcl_GetCurrentThread()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Verify the thread exists.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ThreadExistsInner(thrId) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cut the channel out of the interp/thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadCutChannel(interp, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wrap it into an event.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr = (TransferResult*)ckalloc(sizeof(TransferResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr     = (TransferEvent *)ckalloc(sizeof(TransferEvent));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->chan       = chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->event.proc = TransferEventProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->resultPtr  = resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the result fields.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->done       = (Tcl_Condition) NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->resultCode = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->resultMsg  = (char *) NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Maintain the cleanup list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->srcThreadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->dstThreadId = thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->eventPtr    = evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceIn(resultPtr, transferList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Queue the event and poke the other thread's notifier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)evPtr, TCL_QUEUE_TAIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadAlert(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * (*) Block until the other thread has either processed the transfer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * or rejected it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (resultPtr->resultCode < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&resultPtr->done, &threadMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Unlink result from the result list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceOut(resultPtr, transferList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->eventPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->nextPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->prevPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionFinalize(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Process the result now.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->resultCode != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Transfer failed, restore old state of channel with respect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * to current thread and specified interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SpliceChannel(chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_RegisterChannel(interp, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_UnregisterChannel((Tcl_Interp *) NULL, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "transfer failed: ", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->resultMsg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, resultPtr->resultMsg, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(resultPtr->resultMsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "for reasons unknown", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ckfree((char *)resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->resultMsg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(resultPtr->resultMsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char *)resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadDetach --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Detaches the specified channel which must not be shared and has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to be registered in the given interp. The detached channel is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  left in the transfer list until some other thread attaches it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- +  by calling the "thread::attach" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The thread-global lists of all known channels (transferList)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  is modified. All event handling for the channel is killed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadDetach(interp, chan)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan;           /* The channel to detach */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferEvent *evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferResult *resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!Tcl_IsChannelRegistered(interp, chan)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("channel is not registered here", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_IsChannelShared(chan)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("channel is shared", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cut the channel out of the interp/thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadCutChannel(interp, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wrap it into the list of transfered channels. We generate no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * events associated with the detached channel, thus really not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * needing the transfer event structure allocated here. This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * is done purely to avoid having yet another wrapper.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr = (TransferResult*)ckalloc(sizeof(TransferResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr     = (TransferEvent*)ckalloc(sizeof(TransferEvent));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->chan       = chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->event.proc = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->resultPtr  = resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the result fields. This is not used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->done       = (Tcl_Condition)NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->resultCode = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->resultMsg  = (char*)NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Maintain the cleanup list. By setting the dst/srcThreadId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * to zero we signal the code in ThreadAttach that this is the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * detached channel. Therefore it should not be mistaken for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * some regular TransferChannel operation underway. Also, this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * will prevent the code in ThreadExitProc to splice out this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * record from the list when the threads are exiting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * A side effect of this is that we may have entries in this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * list which may never be removed (i.e. nobody attaches the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * channel later on). This will result in both Tcl channel and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * memory leak.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->srcThreadId = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->dstThreadId = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->eventPtr    = evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceIn(resultPtr, transferList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadAttach --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Attaches the previously detached channel into the current
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The thread-global lists of all known channels (transferList)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  is modified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadAttach(interp, chanName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *chanName;             /* The name of the channel to detach */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int found = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferResult *resPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Locate the channel to attach by looking up its name in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the list of transfered channels. Watch that we don't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * hit the regular channel transfer event.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (resPtr = transferList; resPtr; resPtr = resPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        chan = resPtr->eventPtr->chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!strcmp(Tcl_GetChannelName(chan),chanName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && !resPtr->dstThreadId) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_IsChannelExisting(chanName)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "channel already exists", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            SpliceOut(resPtr, transferList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)resPtr->eventPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)resPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            found = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (found == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "channel not detached", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Splice channel into the current interpreter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SpliceChannel(chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_RegisterChannel(interp, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_UnregisterChannel((Tcl_Interp *)NULL, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadSend --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Run the procedure in other thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSend(interp, thrId, send, clbk, flags)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp     *interp;      /* The current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId    thrId;       /* Thread Id of other thread. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *send;        /* Pointer to structure with work to do */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadClbkData *clbk;        /* Opt. callback structure (may be NULL) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int             flags;       /* Wait or queue to tail */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = NULL; /* ... of the target thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEvent *eventPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult *resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Verify the thread exists and is not in the error state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * The thread is in the error state only if we've configured
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * it to unwind on script evaluation error and last script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * evaluation resulted in error actually.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == (ThreadSpecificData*)NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            || (tsdPtr->flags & THREAD_FLAGS_INERROR)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int inerror = tsdPtr && (tsdPtr->flags & THREAD_FLAGS_INERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadFreeProc((ClientData)send);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (clbk) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ThreadFreeProc((ClientData)clbk);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (inerror) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewStringObj("thread is in error", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Short circuit sends to ourself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (thrId == Tcl_GetCurrentThread()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((flags & THREAD_SEND_WAIT)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       int code = (*send->execProc)(interp, (ClientData)send);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ThreadFreeProc((ClientData)send);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            send->interp = interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Preserve((ClientData)send->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DoWhenIdle((Tcl_IdleProc*)ThreadIdleProc, (ClientData)send);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create the event for target thread event queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eventPtr = (ThreadEvent*)ckalloc(sizeof(ThreadEvent));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eventPtr->sendData = send;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eventPtr->clbkData = clbk;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Target thread about to service
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * another event
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr->maxEventsCount) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->eventsPending++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Caller wants to be notified, so we must take care
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * it's interpreter stays alive until we've finished.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (eventPtr->clbkData) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Preserve((ClientData)eventPtr->clbkData->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((flags & THREAD_SEND_WAIT) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr              = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        eventPtr->resultPtr    = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr = (ThreadEventResult*)ckalloc(sizeof(ThreadEventResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->done        = (Tcl_Condition)NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->result      = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorCode   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorInfo   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->dstThreadId = thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->srcThreadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->eventPtr    = eventPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        eventPtr->resultPtr    = resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SpliceIn(resultPtr, resultList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Queue the event and poke the other thread's notifier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eventPtr->event.proc = ThreadEventProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((flags & THREAD_SEND_HEAD)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)eventPtr, TCL_QUEUE_HEAD);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)eventPtr, TCL_QUEUE_TAIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadAlert(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((flags & THREAD_SEND_WAIT) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Might potentially spend some time here, until the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * worker thread cleans up its queue a little bit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if ((flags & THREAD_SEND_CLBK) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            while (tsdPtr->maxEventsCount &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   tsdPtr->eventsPending > tsdPtr->maxEventsCount) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ConditionWait(&tsdPtr->doOneEvent, &threadMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Block on the result indefinitely.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (resultPtr->result == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&resultPtr->done, &threadMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceOut(resultPtr, resultList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Return result to caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->code == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->errorCode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetErrorCode(interp, resultPtr->errorCode, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(resultPtr->errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->errorInfo) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AddErrorInfo(interp, resultPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(resultPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    code = resultPtr->code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(resultPtr->result, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cleanup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionFinalize(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr->result != threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(resultPtr->result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadWait --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Waits for events and process them as they come, until signaled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to stop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Deletes any thread::send or thread::transfer events that are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  pending.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadWait(Tcl_Interp *interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int canrun = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Process events until signaled to stop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (canrun) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * About to service another event.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Wake-up eventual sleepers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr->maxEventsCount) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->eventsPending--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionNotify(&tsdPtr->doOneEvent);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Attempt to process one event, blocking forever until an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * event is actually received.  The event processed may cause
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * a script in progress to be canceled or exceed its limit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * therefore, check for these conditions if we are able to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * (i.e. we are running in a high enough version of Tcl).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DoOneEvent(TCL_ALL_EVENTS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (haveInterpCancel) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * If the script has been unwound, bail out immediately. This does
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * not follow the recommended guidelines for how extensions should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * handle the script cancellation functionality because this is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * not a "normal" extension. Most extensions do not have a command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * that simply enters an infinite Tcl event loop. Normal extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * should not specify the TCL_CANCEL_UNWIND when calling the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Tcl_Canceled function to check if the command has been canceled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_Canceled(tsdPtr->interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    TCL_LEAVE_ERR_MSG | TCL_CANCEL_UNWIND) == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                code = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef TCL_TIP143
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (haveInterpLimit) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_LimitExceeded(tsdPtr->interp)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                code = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Test stop condition under mutex since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * some other thread may flip our flags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        canrun = (tsdPtr->flags & THREAD_FLAGS_STOPPED) == 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(TCL_TIP143) || defined(TCL_TIP285)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If the event processing loop above was terminated due to a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * script in progress being canceled or exceeding its limits,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * transfer the error to the current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (code != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char buf[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        const char *errorInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorInfo = Tcl_GetVar2(tsdPtr->interp, "errorInfo", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errorInfo == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           errorInfo = Tcl_GetString(Tcl_GetObjResult(tsdPtr->interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadGetHandle(Tcl_GetCurrentThread(), buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "Error from thread ", buf, "\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                errorInfo, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Remove from the list of active threads, so nobody can post
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * work to this thread, since it is just about to terminate.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListRemove(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Now that the event processor for this thread is closing,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * delete all pending thread::send and thread::transfer events.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * These events are owned by us.  We don't delete anyone else's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * events, but ours.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteEvents((Tcl_EventDeleteProc*)ThreadDeleteEvent, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadReserve --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadReserve(interp, thrId, operation, wait)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;                 /* Target thread ID */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int operation;                      /* THREAD_RESERVE | THREAD_RELEASE */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int wait;                           /* Wait for thread to exit */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int users, dowait = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEvent *evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Check the given thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (thrId == (Tcl_ThreadId)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr == (ThreadSpecificData*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (operation) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case THREAD_RESERVE: ++tsdPtr->refCount;                break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case THREAD_RELEASE: --tsdPtr->refCount; dowait = wait; break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    users = tsdPtr->refCount;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (users <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We're last attached user, so tear down the *target* thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->flags |= THREAD_FLAGS_STOPPED;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (thrId && thrId != Tcl_GetCurrentThread() /* Not current! */) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ThreadEventResult *resultPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Remove from the list of active threads, so nobody can post
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * work to this thread, since it is just about to terminate.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ListRemoveInner(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Send an dummy event, just to wake-up target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * It should immediately exit thereafter. We might get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * stuck here for long time if user really wants to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * be absolutely sure that the thread has exited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (dowait) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr = (ThreadEventResult*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ckalloc(sizeof(ThreadEventResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->done        = (Tcl_Condition)NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->result      = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->code        = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->errorCode   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->errorInfo   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->dstThreadId = thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                resultPtr->srcThreadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                SpliceIn(resultPtr, resultList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr = (ThreadEvent*)ckalloc(sizeof(ThreadEvent));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->event.proc = ThreadEventProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->sendData   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->clbkData   = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->resultPtr  = resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)evPtr, TCL_QUEUE_TAIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ThreadAlert(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (dowait) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                while (resultPtr->result == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_ConditionWait(&resultPtr->done, &threadMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                SpliceOut(resultPtr, resultList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ConditionFinalize(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (resultPtr->result != threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ckfree(resultPtr->result); /* Will be ignored anyway */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckfree((char*)resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetIntObj(Tcl_GetObjResult(interp), (users > 0) ? users : 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadEventProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Handle the event in the target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Returns 1 to indicate that the event was processed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Fills out the ThreadEventResult struct.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadEventProc(evPtr, mask)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event *evPtr;           /* Really ThreadEvent */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int mask;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData* tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp           *interp = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId           thrId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEvent        *eventPtr = (ThreadEvent*)evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData      *sendPtr = eventPtr->sendData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadClbkData      *clbkPtr = eventPtr->clbkData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult* resultPtr = eventPtr->resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code = TCL_ERROR; /* Pessimistic assumption */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * See whether user has any preferences about which interpreter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * to use for running this job. The job structure might identify
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * one. If not, just use the thread's main interpreter which is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * stored in the thread specific data structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Note that later on we might discover that we're running the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * async callback script. In this case, interpreter will be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * changed to one given in the callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    interp = (sendPtr && sendPtr->interp) ? sendPtr->interp : tsdPtr->interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (interp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Preserve((ClientData)interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (clbkPtr && clbkPtr->threadId == thrId) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Release((ClientData)interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* Watch: this thread evaluates its own callback. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            interp = clbkPtr->interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Preserve((ClientData)interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (sendPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_CreateThreadExitHandler(ThreadFreeProc, (ClientData)sendPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (clbkPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_CreateThreadExitHandler(ThreadFreeProc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                            (ClientData)clbkPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            code = (*sendPtr->execProc)(interp, (ClientData)sendPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DeleteThreadExitHandler(ThreadFreeProc, (ClientData)sendPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (clbkPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DeleteThreadExitHandler(ThreadFreeProc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                            (ClientData)clbkPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            code = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (sendPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadFreeProc((ClientData)sendPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        eventPtr->sendData = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Report job result synchronously to waiting caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSetResult(interp, code, resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We still need to release the reference to the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * interpreter added by ThreadSend whenever the callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * data is not NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (clbkPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Release((ClientData)clbkPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (clbkPtr && clbkPtr->threadId != thrId) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSendData *tmpPtr = (ThreadSendData*)clbkPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Route the callback back to it's originator.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Do not wait for the result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (code != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ThreadErrorProc(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSetResult(interp, code, &clbkPtr->result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadSend(interp, clbkPtr->threadId, tmpPtr, NULL, THREAD_SEND_CLBK);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (code != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Only pass errors onto the registered error handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * when we don't have a result target for this event.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadErrorProc(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We still need to release the reference to the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * interpreter added by ThreadSend whenever the callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * data is not NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (clbkPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Release((ClientData)clbkPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We still need to release the reference to the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * interpreter added by ThreadSend whenever the callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * data is not NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (clbkPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Release((ClientData)clbkPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (interp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Release((ClientData)interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Mark unwind scenario for this thread if the script resulted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * in error condition and thread has been marked to unwind.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * This will cause thread to disappear from the list of active
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * threads, clean-up its event queue and exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (code != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tsdPtr->flags & THREAD_FLAGS_UNWINDONERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->flags |= THREAD_FLAGS_INERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (tsdPtr->refCount == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsdPtr->flags |= THREAD_FLAGS_STOPPED;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadSetResult --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSetResult(interp, code, resultPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult *resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t reslen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *errorCode, *errorInfo, *result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (interp == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        code      = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorInfo = "";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorCode = "THREAD";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result    = "no target interp!";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reslen    = strlen(result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->result = (reslen) ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy(ckalloc(1+reslen), result) : threadEmptyResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = Tcl_GetString(Tcl_GetObjResult(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reslen = Tcl_GetObjResult(interp)->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->result = (reslen) ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy(ckalloc(1+reslen), result) : threadEmptyResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (code == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorCode = Tcl_GetVar2(interp, "errorCode", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorInfo = Tcl_GetVar2(interp, "errorInfo", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorCode = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errorInfo = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resultPtr->code = code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (errorCode != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorCode = ckalloc(1+strlen(errorCode));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        strcpy(resultPtr->errorCode, errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorCode = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (errorInfo != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorInfo = ckalloc(1+strlen(errorInfo));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        strcpy(resultPtr->errorInfo, errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->errorInfo = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadGetOption --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetOption(interp, thrId, option, dsPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *option;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DString *dsPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If the optionName is NULL it means that we want
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * a list of all options and values.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    len = (option == NULL) ? 0 : strlen(option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == (ThreadSpecificData*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (len == 0 || (len > 3 && option[1] == 'e' && option[2] == 'v'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     && !strncmp(option,"-eventmark", len))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char buf[16];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DStringAppendElement(dsPtr, "-eventmark");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sprintf(buf, "%d", tsdPtr->maxEventsCount);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringAppendElement(dsPtr, buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (len == 0 || (len > 2 && option[1] == 'u'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     && !strncmp(option,"-unwindonerror", len))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int flag = tsdPtr->flags & THREAD_FLAGS_UNWINDONERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DStringAppendElement(dsPtr, "-unwindonerror");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringAppendElement(dsPtr, flag ? "1" : "0");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (len == 0 || (len > 3 && option[1] == 'e' && option[2] == 'r'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     && !strncmp(option,"-errorstate", len))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int flag = tsdPtr->flags & THREAD_FLAGS_INERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DStringAppendElement(dsPtr, "-errorstate");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DStringAppendElement(dsPtr, flag ? "1" : "0");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (len != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (len != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "bad option \"", option,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\", should be one of -eventmark, "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "-unwindonerror or -errorstate", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadSetOption --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadSetOption(interp, thrId, option, value)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *option;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int len = strlen(option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr = ThreadExistsInner(thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr == (ThreadSpecificData*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ErrorNoSuchThread(interp, thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (len > 3 && option[1] == 'e' && option[2] == 'v'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        && !strncmp(option,"-eventmark", len)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (sscanf(value, "%d", &tsdPtr->maxEventsCount) != 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "expected integer but got \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             value, "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (len > 2 && option[1] == 'u'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !strncmp(option,"-unwindonerror", len)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int flag = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_GetBoolean(interp, value, &flag) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (flag) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->flags |=  THREAD_FLAGS_UNWINDONERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->flags &= ~THREAD_FLAGS_UNWINDONERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (len > 3 && option[1] == 'e' && option[2] == 'r'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && !strncmp(option,"-errorstate", len)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int flag = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_GetBoolean(interp, value, &flag) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (flag) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->flags |=  THREAD_FLAGS_INERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->flags &= ~THREAD_FLAGS_INERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadIdleProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadIdleProc(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *sendPtr = (ThreadSendData*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = (*sendPtr->execProc)(sendPtr->interp, (ClientData)sendPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadErrorProc(sendPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Release((ClientData)sendPtr->interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadFreeProc(clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TransferEventProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Handle a transfer event in the target thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Returns 1 to indicate that the event was processed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Fills out the TransferResult struct.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TransferEventProc(evPtr, mask)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event *evPtr;           /* Really ThreadEvent */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int mask;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData    *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferEvent       *eventPtr = (TransferEvent *)evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferResult     *resultPtr = eventPtr->resultPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp            *interp = tsdPtr->interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char* msg = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (interp == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Reject transfer in case of a missing target.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        code = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        msg  = "target interp missing";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Add channel to current thread and interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * See ThreadTransfer for more explanations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_IsChannelExisting(Tcl_GetChannelName(eventPtr->chan))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Reject transfer. Channel of same name already exists in target.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            code = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            msg  = "channel already exists in target";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SpliceChannel(eventPtr->chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_RegisterChannel(interp, eventPtr->chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_UnregisterChannel((Tcl_Interp *) NULL, eventPtr->chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            code = TCL_OK; /* Return success. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resultPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resultPtr->resultCode = code;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (msg != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            resultPtr->resultMsg = (char*)ckalloc(1+strlen (msg));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy (resultPtr->resultMsg, msg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadFreeProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Called when we are exiting and memory needs to be freed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Clears up mem specified in ClientData
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadFreeProc(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * This will free send and/or callback structures
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * since both are the same in the beginning.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSendData *anyPtr = (ThreadSendData*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (anyPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (anyPtr->clientData) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            (*anyPtr->freeProc)(anyPtr->clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)anyPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadDeleteEvent --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This is called from the ThreadExitProc to delete memory related
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to events that we put on the queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  1 it was our event and we want it removed, 0 otherwise.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  It cleans up our events in the event queue for this thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadDeleteEvent(eventPtr, clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event *eventPtr;        /* Really ThreadEvent */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;      /* dummy */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (eventPtr->proc == ThreadEventProc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Regular script event. Just dispose memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ThreadEvent *evPtr = (ThreadEvent*)eventPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (evPtr->sendData) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ThreadFreeProc((ClientData)evPtr->sendData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->sendData = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (evPtr->clbkData) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ThreadFreeProc((ClientData)evPtr->clbkData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            evPtr->clbkData = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (eventPtr->proc == TransferEventProc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * A channel is in flight toward the thread just exiting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Pass it back to the originator, if possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Else kill it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TransferEvent* evPtr = (TransferEvent *) eventPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (evPtr->resultPtr == (TransferResult *) NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* No thread to pass the channel back to. Kill it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * This requires to splice it temporarily into our channel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * list and then forcing the ref.counter down to the real
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * value of zero. This destroys the channel.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SpliceChannel(evPtr->chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_UnregisterChannel((Tcl_Interp *) NULL, evPtr->chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* Our caller (ThreadExitProc) will pass the channel back.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If it was NULL, we were in the middle of servicing the event
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * and it should be removed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return (eventPtr->proc == NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadExitProc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This is called when the thread exits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  It unblocks anyone that is waiting on a send to this thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  It cleans up any events in the event queue for this thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadExitProc(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *threadEvalScript = (char*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *diemsg = "target thread died";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadEventResult *resultPtr, *nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId self = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TransferResult *tResultPtr, *tNextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (threadEvalScript && threadEvalScript != threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)threadEvalScript);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * NaviServer/AOLserver and threadpool threads get started/stopped
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * out of the control of this interface so this is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the first chance to split them out of the thread list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ListRemoveInner(tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Delete events posted to our queue while we were running.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * For threads exiting from the thread::wait command, this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * has already been done in ThreadWait() function.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * For one-shot threads, having something here is a very
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * strange condition. It *may* happen if somebody posts us
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * an event while we were in the middle of processing some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * lengthly user script. It is unlikely to happen, though.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteEvents((Tcl_EventDeleteProc*)ThreadDeleteEvent, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Walk the list of threads waiting for result from us
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * and inform them that we're about to exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (resultPtr = resultList; resultPtr; resultPtr = nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nextPtr = resultPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (resultPtr->srcThreadId == self) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * We are going away. By freeing up the result we signal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * to the other thread we don't care about the result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            SpliceOut(resultPtr, resultList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)resultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (resultPtr->dstThreadId == self) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Dang. The target is going away. Unblock the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * The result string must be dynamically allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * because the main thread is going to call free on it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            resultPtr->result = strcpy(ckalloc(1+strlen(diemsg)), diemsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            resultPtr->code = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            resultPtr->errorCode = resultPtr->errorInfo = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionNotify(&resultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tResultPtr = transferList; tResultPtr; tResultPtr = tNextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tNextPtr = tResultPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tResultPtr->srcThreadId == self) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * We are going away. By freeing up the result we signal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * to the other thread we don't care about the result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * This should not happen, as this thread should be in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * ThreadTransfer at location (*).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            SpliceOut(tResultPtr, transferList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)tResultPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (tResultPtr->dstThreadId == self) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Dang. The target is going away. Unblock the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * The result string must be dynamically allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * because the main thread is going to call free on it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tResultPtr->resultMsg = strcpy(ckalloc(1+strlen(diemsg)),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                           diemsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tResultPtr->resultCode = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionNotify(&tResultPtr->done);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&threadMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadGetHandle --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Construct the handle of the thread which is suitable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to pass to Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetHandle(thrId, handlePtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *handlePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sprintf(handlePtr, THREAD_HNDLPREFIX"%p", thrId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadGetId --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Returns the ID of thread given it's Tcl handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Thread ID.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadGetId(interp, handleObj, thrIdPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Obj *handleObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_ThreadId *thrIdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *thrHandle = Tcl_GetString(handleObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (sscanf(thrHandle, THREAD_HNDLPREFIX"%p", thrIdPtr) == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_AppendResult(interp, "invalid thread handle \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     thrHandle, "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  ErrorNoSuchThread --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Convenience function to set interpreter result when the thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  given by it's ID cannot be found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ErrorNoSuchThread(interp, thrId)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thrId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char thrHandle[THREAD_HNDLMAXLEN];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadGetHandle(thrId, thrHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_AppendResult(interp, "thread \"", thrHandle,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     "\" does not exist", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  ThreadCutChannel --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Dissociate a Tcl channel from the current thread/interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Events still pending in the thread event queue and ready to fire
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  are not processed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCutChannel(interp, chan)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Channel chan;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DriverWatchProc *watchProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ClearChannelHandlers(chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    watchProc   = Tcl_ChannelWatchProc(Tcl_GetChannelType(chan));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * This effectively disables processing of pending
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * events which are ready to fire for the given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * channel. If we do not do this, events will hit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the detached channel which is potentially being
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * owned by some other thread. This will wreck havoc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * on our memory and eventually badly hurt us...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (watchProc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (*watchProc)(Tcl_GetChannelInstanceData(chan), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Artificially bump the channel reference count
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * which protects us from channel being closed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * during the Tcl_UnregisterChannel().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_RegisterChannel((Tcl_Interp *) NULL, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_UnregisterChannel(interp, chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CutChannel(chan);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadNs.c b/vendor/thread2.7.3/generic/threadNs.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index fa4184a8c..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadNs.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,88 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadNs.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Adds interface for loading the extension into the NaviServer/AOLserver.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <ns.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int Ns_ModuleVersion = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * NsThread_Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Loads the package for the first time, i.e. in the startup thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Standard Tcl result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Package initialized. Tcl commands created.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NsThread_Init (Tcl_Interp *interp, void *cd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    NsThreadInterpData *md = (NsThreadInterpData*)cd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret = Thread_Init(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Ns_Log(Warning, "can't load module %s: %s", md->modname,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   Tcl_GetString(Tcl_GetObjResult(interp)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetAssocData(interp, "thread:nsd", NULL, (ClientData)md);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Ns_ModuleInit --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Called by the NaviServer/AOLserver when loading shared object file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Standard NaviServer/AOLserver result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Many. Depends on the package.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Ns_ModuleInit(char *srv, char *mod)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    NsThreadInterpData *md = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    md = (NsThreadInterpData*)ns_malloc(sizeof(NsThreadInterpData));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    md->modname = strcpy(ns_malloc(strlen(mod)+1), mod);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    md->server  = strcpy(ns_malloc(strlen(srv)+1), srv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Ns_TclRegisterTrace(srv, NsThread_Init, (void*)md, NS_TCL_TRACE_CREATE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* NS_AOLSERVER */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: aolstub.cpp,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadPoolCmd.c b/vendor/thread2.7.3/generic/threadPoolCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4fc3d864d..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadPoolCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1940 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadPoolCmd.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements the Tcl thread pools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure to maintain idle poster threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct TpoolWaiter {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId threadId;         /* Thread id of the current thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolWaiter *nextPtr;   /* Next structure in the list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolWaiter *prevPtr;   /* Previous structure in the list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} TpoolWaiter;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure describing an instance of a thread pool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadPool {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId;              /* Job counter */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idleTime;                   /* Time in secs a worker thread idles */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int tearDown;                   /* Set to 1 to tear down the pool */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int suspend;                    /* Set to 1 to suspend pool processing */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *initScript;               /* Script to initialize worker thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *exitScript;               /* Script to cleanup the worker */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int minWorkers;                 /* Minimum number or worker threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int maxWorkers;                 /* Maximum number of worker threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numWorkers;                 /* Current number of worker threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int idleWorkers;                /* Number of idle workers */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int refCount;                   /* Reference counter for reserve/release */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex mutex;                /* Pool mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition cond;             /* Pool condition variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashTable jobsDone;         /* Stores processed job results */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolResult *workTail;   /* Tail of the list with jobs pending*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolResult *workHead;   /* Head of the list with jobs pending*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolWaiter *waitTail;   /* Tail of the thread waiters list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolWaiter *waitHead;   /* Head of the thread waiters list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadPool *nextPtr;     /* Next structure in the threadpool list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct ThreadPool *prevPtr;     /* Previous structure in threadpool list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadPool;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TPOOL_HNDLPREFIX  "tpool"   /* Prefix to generate Tcl pool handles */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TPOOL_MINWORKERS  0         /* Default minimum # of worker threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TPOOL_MAXWORKERS  4         /* Default maximum # of worker threads */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define TPOOL_IDLETIMER   0         /* Default worker thread idle timer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure for passing evaluation results
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct TpoolResult {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int detached;                   /* Result is to be ignored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId;              /* The job id of the current job */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *script;                   /* Script to evaluate in worker thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int scriptLen;                  /* Length of the script */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int retcode;                    /* Tcl return code of the current job */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *result;                   /* Tcl result of the current job */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *errorCode;                /* On error: content of the errorCode */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *errorInfo;                /* On error: content of the errorInfo */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId threadId;          /* Originating thread id */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;           /* Current thread pool */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolResult *nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct TpoolResult *prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} TpoolResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Private structure for each worker/poster thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct ThreadSpecificData {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int stop;                       /* Set stop event; exit from event loop */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolWaiter *waitPtr;           /* Threads private idle structure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ThreadSpecificData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadDataKey dataKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This global list maintains thread pools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadPool *tpoolList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex listMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex startMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Used to represent the empty result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *threadEmptyResult = (char *)"";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Functions implementing Tcl commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolCreateObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolPostObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolWaitObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolCancelObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolGetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolReserveObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolReleaseObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolSuspendObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolResumeObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc TpoolNamesObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Miscelaneous functions used within this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CreateWorker(Tcl_Interp *interp, ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadCreateType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolWorker(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RunStopEvent(Tcl_Event *evPtr, int mask);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PushWork(TpoolResult *rPtr, ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static TpoolResult*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PopWork(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PushWaiter(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static TpoolWaiter*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PopWaiter(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SignalWaiter(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolEval(Tcl_Interp *interp, char *script, int scriptLen,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            TpoolResult *rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SetResult(Tcl_Interp *interp, TpoolResult *rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadPool*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetTpool(const char *tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadPool*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetTpoolUnl(const char *tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThrExitHandler(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AppExitHandler(ClientData clientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolReserve(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolRelease(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolSuspend(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolResume(ThreadPool *tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-InitWaiter(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolCreateObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::create" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolCreateObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, minw, maxw, idle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char buf[64], *exs = NULL, *cmd = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:  tpool::create ?-minworkers count?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *                        ?-maxworkers count?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *                        ?-initcmd script?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *                        ?-exitcmd script?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *                        ?-idletime seconds?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (((objc-1) % 2)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    minw = TPOOL_MINWORKERS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    maxw = TPOOL_MAXWORKERS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    idle = TPOOL_IDLETIMER;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Parse the optional arguments
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 1; ii < objc; ii += 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char *opt = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (OPT_CMP(opt, "-minworkers")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_GetIntFromObj(interp, objv[ii+1], &minw) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-maxworkers")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_GetIntFromObj(interp, objv[ii+1], &maxw) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-idletime")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_GetIntFromObj(interp, objv[ii+1], &idle) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-initcmd")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *val = Tcl_GetString(objv[ii+1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            cmd  = strcpy(ckalloc(objv[ii+1]->length+1), val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-exitcmd")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *val = Tcl_GetString(objv[ii+1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            exs  = strcpy(ckalloc(objv[ii+1]->length+1), val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Do some consistency checking
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (minw < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        minw = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (maxw < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        maxw = TPOOL_MAXWORKERS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (minw > maxw) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        maxw = minw;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate and initialize thread pool structure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr = (ThreadPool*)ckalloc(sizeof(ThreadPool));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    memset(tpoolPtr, 0, sizeof(ThreadPool));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->minWorkers  = minw;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->maxWorkers  = maxw;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->idleTime    = idle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->initScript  = cmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->exitScript  = exs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_InitHashTable(&tpoolPtr->jobsDone, TCL_ONE_WORD_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceIn(tpoolPtr, tpoolList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Start the required number of worker threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * On failure to start any of them, tear-down
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * partially initialized pool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 0; ii < tpoolPtr->minWorkers; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (CreateWorker(interp, tpoolPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TpoolRelease(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sprintf(buf, "%s%p", TPOOL_HNDLPREFIX, tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WrongNumArgs(interp, 1, objv,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     "?-minworkers count? ?-maxworkers count? "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     "?-initcmd script? ?-exitcmd script? "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     "?-idletime seconds?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolPostObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::post" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolPostObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, detached = 0, nowait = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *tpoolName, *script;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::post ?-detached? ?-nowait? tpoolId script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3 || objc > 5) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 1; ii < objc; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char *opt = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*opt != '-') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-detached")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            detached  = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (OPT_CMP(opt, "-nowait")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            nowait = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto usage;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    script    = Tcl_GetString(objv[ii+1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    len = objv[ii+1]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize per-thread private data for this caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    InitWaiter();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * See if any worker available to run the job.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nowait) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tpoolPtr->numWorkers == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Assure there is at least one worker running.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PushWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (CreateWorker(interp, tpoolPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Wait for worker to start while servicing the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->stop = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            while(tsdPtr->stop == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DoOneEvent(TCL_ALL_EVENTS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * If there are no idle worker threads, start some new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * unless we are already running max number of workers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * In that case wait for the next one to become idle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (tpoolPtr->idleWorkers == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PushWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (tpoolPtr->numWorkers < tpoolPtr->maxWorkers) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 * No more free workers; start new one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (CreateWorker(interp, tpoolPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Wait for worker to start while servicing the event loop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsdPtr->stop = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            while(tsdPtr->stop == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DoOneEvent(TCL_ALL_EVENTS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create new job ticket and put it on the list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr = (TpoolResult*)ckalloc(sizeof(TpoolResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    memset(rPtr, 0, sizeof(TpoolResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (detached == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        jobId = ++tpoolPtr->jobId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->jobId = jobId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->script    = strcpy(ckalloc(len+1), script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->scriptLen = len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->detached  = detached;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->threadId  = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PushWork(rPtr, tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (detached == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewWideIntObj(jobId));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WrongNumArgs(interp, 1, objv, "?-detached? ?-nowait? tpoolId script");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolWaitObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::wait" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolWaitObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, done, wObjc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *listVar = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *waitList, *doneList, **wObjv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::wait tpoolId jobIdList ?listVar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3 || objc > 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId jobIdList ?listVar");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listVar = objv[3];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_ListObjGetElements(interp, objv[2], &wObjc, &wObjv) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    InitWaiter();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done = 0; /* Number of elements in the done list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    doneList = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        waitList = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for (ii = 0; ii < wObjc; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_GetWideIntFromObj(interp, wObjv[ii], &jobId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            hPtr = Tcl_FindHashEntry(&tpoolPtr->jobsDone, (void *)(size_t)jobId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                rPtr = (TpoolResult*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                rPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (rPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (listVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_ListObjAppendElement(interp, waitList, wObjv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else if (!rPtr->detached && rPtr->result) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                done++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ListObjAppendElement(interp, doneList, wObjv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else if (listVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ListObjAppendElement(interp, waitList, wObjv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (done) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * None of the jobs done, wait for completion
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * of the next job and try again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(waitList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PushWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->stop = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (tsdPtr->stop == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DoOneEvent(TCL_ALL_EVENTS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (listVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ObjSetVar2(interp, listVar, NULL, waitList, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, doneList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolCancelObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::cancel" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolCancelObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii, wObjc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *listVar = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *doneList, *waitList, **wObjv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::wait tpoolId jobIdList ?listVar?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3 || objc > 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId jobIdList ?listVar");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listVar = objv[3];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_ListObjGetElements(interp, objv[2], &wObjc, &wObjv) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    InitWaiter();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    doneList = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    waitList = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (ii = 0; ii < wObjc; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_GetWideIntFromObj(interp, wObjv[ii], &jobId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for (rPtr = tpoolPtr->workHead; rPtr; rPtr = rPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (rPtr->jobId == jobId) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (rPtr->prevPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rPtr->prevPtr->nextPtr = rPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    tpoolPtr->workHead = rPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (rPtr->nextPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rPtr->nextPtr->prevPtr = rPtr->prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    tpoolPtr->workTail = rPtr->prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                SetResult(NULL, rPtr); /* Just to free the result */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckfree(rPtr->script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckfree((char*)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ListObjAppendElement(interp, doneList, wObjv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr == NULL && listVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ListObjAppendElement(interp, waitList, wObjv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (listVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ObjSetVar2(interp, listVar, NULL, waitList, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, doneList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolGetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::get" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolGetObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt jobId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *resVar = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::get tpoolId jobId ?result?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3 || objc > 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId jobId ?result?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_GetWideIntFromObj(interp, objv[2], &jobId) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        resVar = objv[3];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Locate the threadpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Locate the job in question. It is an error to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * do a "get" on bogus job handle or on the job
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * which did not complete yet.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hPtr = Tcl_FindHashEntry(&tpoolPtr->jobsDone, (void *)(size_t)jobId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (hPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "no such job", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr = (TpoolResult*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr->result == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "job not completed", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteHashEntry(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = rPtr->retcode;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SetResult(interp, rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (resVar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ObjSetVar2(interp, resVar, NULL, Tcl_GetObjResult(interp), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolReserveObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::preserve" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolReserveObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::preserve tpoolId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpoolUnl(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = TpoolReserve(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolReleaseObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::release" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolReleaseObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::release tpoolId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpoolUnl(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = TpoolRelease(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolSuspendObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::suspend" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolSuspendObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::suspend tpoolId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolSuspend(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolResumeObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::resume" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolResumeObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: tpool::resume tpoolId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "tpoolId");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr  = GetTpool(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "can not find threadpool \"", tpoolName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResume(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolNamesObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This procedure is invoked to process the "tpool::names" Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  command. See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolNamesObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData  dummy;          /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;         /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int         objc;           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj    *const objv[];   /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *listObj = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tpoolPtr = tpoolList; tpoolPtr; tpoolPtr = tpoolPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char buf[32];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sprintf(buf, "%s%p", TPOOL_HNDLPREFIX, tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj(buf,-1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, listObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * CreateWorker --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Creates new worker thread for the given pool. Assumes the caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  holds the pool mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Informs waiter thread (if any) about the new worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CreateWorker(interp, tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId id;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the result structure to be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * passed to the new thread. This is used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * as communication to and from the thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    memset(&result, 0, sizeof(TpoolResult));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result.retcode  = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result.tpoolPtr = tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create new worker thread here. Wait for the thread to start
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * because it's using the ThreadResult arg which is on our stack.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_CreateThread(&id, TpoolWorker, (ClientData)&result,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         TCL_THREAD_STACK_DEFAULT, 0) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewStringObj("can't create a new thread", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while(result.retcode == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&tpoolPtr->cond, &startMutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Set error-related information if the thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * failed to initialize correctly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (result.retcode == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result.retcode = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SetResult(interp, &result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolWorker --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  This is the main function of each of the threads in the pool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ThreadCreateType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolWorker(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult          *rPtr = (TpoolResult*)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool       *tpoolPtr = rPtr->tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int tout = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Time waitTime, *idlePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *errMsg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the Tcl interpreter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    interp = (Tcl_Interp*)Ns_TclAllocateInterp(NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->retcode = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    interp = Tcl_CreateInterp();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_Init(interp) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->retcode = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (Thread_Init(interp) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->retcode = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->retcode = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr->retcode == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errMsg = Tcl_GetString(Tcl_GetObjResult(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->result = strcpy(ckalloc(strlen(errMsg)+1), errMsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto out;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Initialize the interpreter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->initScript) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TpoolEval(interp, tpoolPtr->initScript, -1, rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->retcode != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->retcode = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            errMsg = Tcl_GetString(Tcl_GetObjResult(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->result  = strcpy(ckalloc(strlen(errMsg)+1), errMsg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexUnlock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto out;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Setup idle timer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->idleTime == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        idlePtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        waitTime.sec  = tpoolPtr->idleTime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        waitTime.usec = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        idlePtr = &waitTime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tell caller we've started
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->numWorkers++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&startMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wait for jobs to arrive. Note the handcrafted time test.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tcl API misses the return value of the Tcl_ConditionWait().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Hence, we do not know why the call returned. Was it someone
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * signalled the variable or has the idle timer expired?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (!tpoolPtr->tearDown) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SignalWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tpoolPtr->idleWorkers++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tout = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (tpoolPtr->suspend
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               || (!tpoolPtr->tearDown && !tout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   && (rPtr = PopWork(tpoolPtr)) == NULL)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (tpoolPtr->suspend && rPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ConditionWait(&tpoolPtr->cond, &tpoolPtr->mutex, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else if (rPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Time t1, t2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_GetTime(&t1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ConditionWait(&tpoolPtr->cond, &tpoolPtr->mutex, idlePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_GetTime(&t2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (tpoolPtr->idleTime > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    tout = (t2.sec - t1.sec) >= tpoolPtr->idleTime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tpoolPtr->idleWorkers--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (tpoolPtr->numWorkers > tpoolPtr->minWorkers) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break; /* Enough workers, can safely kill this one */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                continue; /* Worker count at min, leave this one alive */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (tpoolPtr->tearDown) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PushWork(rPtr, tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break; /* Kill worker because pool is going down */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TpoolEval(interp, rPtr->script, rPtr->scriptLen, rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(rPtr->script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!rPtr->detached) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int new;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetHashValue(Tcl_CreateHashEntry(&tpoolPtr->jobsDone,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                 (void *)(size_t)rPtr->jobId, &new),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             (ClientData)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tear down the worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->exitScript) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TpoolEval(interp, tpoolPtr->exitScript, -1, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->numWorkers--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SignalWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Ns_TclMarkForDelete(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Ns_TclDeAllocateInterp(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteInterp(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ExitThread(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_THREAD_CREATE_RETURN;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * RunStopEvent --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Signalizes the waiter thread to stop waiting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  1 (always)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RunStopEvent(eventPtr, mask)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event *eventPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int mask;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsdPtr->stop = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * PushWork --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Adds a worker thread to the end of the workers list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PushWork(rPtr, tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceIn(rPtr, tpoolPtr->workHead);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->workTail == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tpoolPtr->workTail = rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * PopWork --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pops the work ticket from the list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static TpoolResult *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PopWork(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr = tpoolPtr->workTail;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->workTail = rPtr->prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceOut(rPtr, tpoolPtr->workHead);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->nextPtr = rPtr->prevPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * PushWaiter --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Adds a waiter thread to the end of the waiters list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PushWaiter(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceIn(tsdPtr->waitPtr, tpoolPtr->waitHead);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->waitTail == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tpoolPtr->waitTail = tsdPtr->waitPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * PopWaiter --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pops the first waiter from the head of the waiters list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static TpoolWaiter*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PopWaiter(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolWaiter *waitPtr =  tpoolPtr->waitTail;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (waitPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->waitTail = waitPtr->prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceOut(waitPtr, tpoolPtr->waitHead);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    waitPtr->prevPtr = waitPtr->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return waitPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetTpool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Parses the Tcl threadpool handle and locates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  corresponding threadpool maintenance structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pointer to the threadpool struct or NULL if none found,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadPool*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetTpool(tpoolName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr = GetTpoolUnl(tpoolName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetTpoolUnl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Parses the threadpool handle and locates the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  corresponding threadpool maintenance structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Assumes caller holds the listMutex,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pointer to the threadpool struct or NULL if none found,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static ThreadPool*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetTpoolUnl (tpoolName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *tpoolName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpool;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (sscanf(tpoolName, TPOOL_HNDLPREFIX"%p", &tpool) != 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tpoolPtr = tpoolList; tpoolPtr; tpoolPtr = tpoolPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tpoolPtr == tpool) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolEval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Evaluates the script and fills in the result structure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Standard Tcl result,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Many, depending on the script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolEval(interp, script, scriptLen, rPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *script;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int scriptLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t reslen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *errorCode, *errorInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_EvalEx(interp, script, scriptLen, TCL_EVAL_GLOBAL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr == NULL || rPtr->detached) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rPtr->retcode = ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorCode = Tcl_GetVar2(interp, "errorCode", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        errorInfo = Tcl_GetVar2(interp, "errorInfo", NULL, TCL_GLOBAL_ONLY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errorCode != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->errorCode = ckalloc(1 + strlen(errorCode));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy(rPtr->errorCode, errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (errorInfo != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->errorInfo = ckalloc(1 + strlen(errorInfo));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            strcpy(rPtr->errorInfo, errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = Tcl_GetString(Tcl_GetObjResult(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    reslen = Tcl_GetObjResult(interp)->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (reslen == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->result = threadEmptyResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr->result = strcpy(ckalloc(1 + reslen), result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SetResult
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Sets the result in current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Standard Tcl result,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SetResult(interp, rPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr->retcode == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->errorCode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (interp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjErrorCode(interp,Tcl_NewStringObj(rPtr->errorCode,-1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(rPtr->errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->errorCode = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->errorInfo) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (interp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AddErrorInfo(interp, rPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(rPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->errorInfo = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rPtr->result) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->result == threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (interp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (interp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjResult(interp, Tcl_NewStringObj(rPtr->result,-1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(rPtr->result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            rPtr->result = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolReserve --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Does the pool preserve and/or release. Assumes caller holds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  the listMutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  May tear-down the threadpool if refcount drops to 0 or below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolReserve(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ++tpoolPtr->refCount;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolRelease --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Does the pool preserve and/or release. Assumes caller holds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  the listMutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  May tear-down the threadpool if refcount drops to 0 or below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolRelease(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolResult *rPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (--tpoolPtr->refCount > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return tpoolPtr->refCount;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Pool is going away; remove from the list of pools,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpliceOut(tpoolPtr, tpoolList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    InitWaiter();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Signal and wait for all workers to die.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->tearDown = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (tpoolPtr->numWorkers > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PushWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->stop = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while(tsdPtr->stop == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DoOneEvent(TCL_ALL_EVENTS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tear down the pool structure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->initScript) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(tpoolPtr->initScript);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tpoolPtr->exitScript) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(tpoolPtr->exitScript);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cleanup completed but not collected jobs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hPtr = Tcl_FirstHashEntry(&tpoolPtr->jobsDone, &search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (hPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rPtr = (TpoolResult*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->result && rPtr->result != threadEmptyResult) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree(rPtr->result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rPtr->retcode == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (rPtr->errorInfo) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckfree(rPtr->errorInfo);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (rPtr->errorCode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckfree(rPtr->errorCode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DeleteHashEntry(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        hPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteHashTable(&tpoolPtr->jobsDone);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cleanup jobs posted but never completed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (rPtr = tpoolPtr->workHead; rPtr; rPtr = rPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(rPtr->script);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)rPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexFinalize(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionFinalize(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolSuspend --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Marks the pool as suspended. This prevents pool workers to drain
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  the pool work queue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Value of the suspend flag (1 always).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  During the suspended state, pool worker threads wlll not timeout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  even if the worker inactivity timer has been configured.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolSuspend(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->suspend = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * TpoolResume --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Clears the pool suspended state. This allows pool workers to drain
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  the pool work queue again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Pool workers may be started or awaken.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TpoolResume(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpoolPtr->suspend = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionNotify(&tpoolPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&tpoolPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SignalWaiter --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Signals the waiter thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  The waiter thread will exit from the event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SignalWaiter(tpoolPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TpoolWaiter *waitPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Event *evPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    waitPtr = PopWaiter(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (waitPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr = (Tcl_Event*)ckalloc(sizeof(Tcl_Event));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    evPtr->proc = RunStopEvent;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadQueueEvent(waitPtr->threadId,(Tcl_Event*)evPtr,TCL_QUEUE_TAIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadAlert(waitPtr->threadId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * InitWaiter --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Setup poster thread to be able to wait in the event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-InitWaiter ()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tsdPtr->waitPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->waitPtr = (TpoolWaiter*)ckalloc(sizeof(TpoolWaiter));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->waitPtr->prevPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->waitPtr->nextPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsdPtr->waitPtr->threadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_CreateThreadExitHandler(ThrExitHandler, (ClientData)tsdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThrExitHandler --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Performs cleanup when a caller (poster) thread exits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThrExitHandler(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadSpecificData *tsdPtr = (ThreadSpecificData *)clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)tsdPtr->waitPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * AppExitHandler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Deletes all threadpools on application exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AppExitHandler(clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData clientData;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadPool *tpoolPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Restart with head of list each time until empty. [Bug 1427570]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tpoolPtr = tpoolList; tpoolPtr; tpoolPtr = tpoolList) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TpoolRelease(tpoolPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Tpool_Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Create commands in current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  On first load, creates application exit handler to clean up
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  any threadpools left.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tpool_Init (interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Interp where to create cmds */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static int initialized;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"create",   TpoolCreateObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"names",    TpoolNamesObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"post",     TpoolPostObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"wait",     TpoolWaitObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"cancel",   TpoolCancelObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"get",      TpoolGetObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"preserve", TpoolReserveObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"release",  TpoolReleaseObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"suspend",  TpoolSuspendObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, TPOOL_CMD_PREFIX"resume",   TpoolResumeObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_CreateExitHandler(AppExitHandler, (ClientData)-1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            initialized = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&listMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadPoolCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSpCmd.c b/vendor/thread2.7.3/generic/threadSpCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 03df92a3a..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSpCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1930 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadSpCmd.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements commands for script-level access to thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * synchronization primitives. Currently, the exclusive mutex, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * recursive mutex. the reader/writer mutex and condition variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * objects are exposed to the script programmer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Additionaly, a locked eval is also implemented. This is a practical
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * convenience function which relieves the programmer from the need
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to take care about unlocking some mutex after evaluating a protected
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * part of code. The locked eval is recursive-savvy since it used the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * recursive mutex for internal locking.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The Tcl interface to the locking and synchronization primitives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * attempts to catch some very common problems in thread programming
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * like attempting to lock an exclusive mutex twice from the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * thread (deadlock), waiting on the condition variable without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * locking the mutex, destroying primitives while being used, etc...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This all comes with some additional internal locking costs but
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the benefits outweight the costs, especially considering overall
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * performance (or lack of it) of an interpreted laguage like Tcl is.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSpCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Types of synchronization variables we support.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define EMUTEXID  'm' /* First letter of the exclusive mutex name */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define RMUTEXID  'r' /* First letter of the recursive mutex name */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WMUTEXID  'w' /* First letter of the read/write mutex name */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CONDVID   'c' /* First letter of the condition variable name */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SP_MUTEX   1  /* Any kind of mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SP_CONDV   2  /* The condition variable sync type */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure representing one sync primitive (mutex, condition variable).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * We use buckets to manage Tcl names of sync primitives. Each bucket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * is associated with a mutex. Each time we process the Tcl name of an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * sync primitive, we compute it's (trivial) hash and use this hash to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * address one of pre-allocated buckets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The bucket internally utilzes a hash-table to store item pointers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Item pointers are identified by a simple xid1, xid2... counting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * handle. This format is chosen to simplify distribution of handles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * across buckets (natural distribution vs. hash-one as in shared vars).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct _SpItem {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int refcnt;            /* Number of threads operating on the item */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucket;      /* Bucket where this item is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hentry; /* Hash table entry where this item is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} SpItem;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure representing a mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct _SpMutex {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int refcnt;            /* Number of threads operating on the mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucket;      /* Bucket where mutex is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hentry; /* Hash table entry where mutex is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* --- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char type;             /* Type of the mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_AnyMutex *lock;     /* Exclusive, recursive or read/write mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} SpMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure representing a condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct _SpCondv {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int refcnt;            /* Number of threads operating on the variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucket;      /* Bucket where this variable is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hentry; /* Hash table entry where variable is stored */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* --- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutex;        /* Set when waiting on the variable  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition cond;    /* The condition variable itself */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} SpCondv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This global data is used to map opaque Tcl-level names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to pointers of their corresponding synchronization objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int        initOnce;    /* Flag for initializing tables below */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex  initMutex;   /* Controls initialization of primitives */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpBucket  muxBuckets[NUMSPBUCKETS];  /* Maps mutex names/handles */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpBucket  varBuckets[NUMSPBUCKETS];  /* Maps condition variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        * names/handles */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Functions implementing Tcl commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadMutexObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadRWMutexObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadCondObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc ThreadEvalObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Forward declaration of functions used only within this file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       SpMutexLock       (SpMutex *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       SpMutexUnlock     (SpMutex *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       SpMutexFinalize   (SpMutex *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       SpCondvWait       (SpCondv *, SpMutex *, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void      SpCondvNotify     (SpCondv *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       SpCondvFinalize   (SpCondv *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void      AddAnyItem        (int, const char *, size_t, SpItem *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpItem*   GetAnyItem        (int, const char *, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void      PutAnyItem        (SpItem *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpItem *  RemoveAnyItem     (int, const char*, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       RemoveMutex       (const char *, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       RemoveCondv       (const char *, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Obj*  GetName           (int, void *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpBucket* GetBucket         (int, const char *, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int       AnyMutexIsLocked  (Sp_AnyMutex *mPtr, Tcl_ThreadId);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Function-like macros for some frequently used calls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AddMutex(a,b,c)  AddAnyItem(SP_MUTEX, (a), (b), (SpItem*)(c))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define GetMutex(a,b)    (SpMutex*)GetAnyItem(SP_MUTEX, (a), (b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PutMutex(a)      PutAnyItem((SpItem*)(a))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define AddCondv(a,b,c)  AddAnyItem(SP_CONDV, (a), (b), (SpItem*)(c))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define GetCondv(a,b)    (SpCondv*)GetAnyItem(SP_CONDV, (a), (b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define PutCondv(a)      PutAnyItem((SpItem*)(a))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define IsExclusive(a)   ((a)->type == EMUTEXID)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define IsRecursive(a)   ((a)->type == RMUTEXID)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define IsReadWrite(a)   ((a)->type == WMUTEXID)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This macro produces a hash-value for table-lookups given a handle
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * and its length. It is implemented as macro just for speed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * It is actually a trivial thing because the handles are simple
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * counting values with a small three-letter prefix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define GetHash(a,b) (atoi((a)+((b) < 4 ? 0 : 3)) % NUMSPBUCKETS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadMutexObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This procedure is invoked to process "thread::mutex" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadMutexObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData dummy;                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int opt, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t nameLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *mutexName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char type;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutexPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static const char *cmdOpts[] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "create", "destroy", "lock", "unlock", NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    enum options {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        m_CREATE, m_DESTROY, m_LOCK, m_UNLOCK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::mutex create ?-recursive?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::mutex destroy <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::mutex lock <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::mutex unlock <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "option ?args?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_GetIndexFromObjStruct(interp, objv[1], cmdOpts, sizeof(char *), "option", 0, &opt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cover the "create" option first. It needs no existing handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)m_CREATE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Obj *nameObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        const char *arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Parse out which type of mutex to create
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            type = EMUTEXID;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (objc > 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 2, objv, "?-recursive?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arg = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (OPT_CMP(arg, "-recursive")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                type = RMUTEXID;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_WrongNumArgs(interp, 2, objv, "?-recursive?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Create the requested mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr = (SpMutex*)ckalloc(sizeof(SpMutex));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->type   = type;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->bucket = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->hentry = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->lock   = NULL; /* Will be auto-initialized */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Generate Tcl name for this mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nameObj = GetName(mutexPtr->type, (void*)mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexName = Tcl_GetString(nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nameLen = nameObj->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AddMutex(mutexName, nameLen, mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * All other options require a valid name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 2, objv, "mutexHandle");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mutexName = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nameLen = objv[2]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try mutex destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)m_DESTROY) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = RemoveMutex(mutexName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ret == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            notfound:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "no such mutex \"", mutexName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "mutex is in use", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try all other options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mutexPtr = GetMutex(mutexName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (mutexPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto notfound;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!IsExclusive(mutexPtr) && !IsRecursive(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "wrong mutex type, must be either"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         " exclusive or recursive", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch ((enum options)opt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case m_LOCK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!SpMutexLock(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "locking the same exclusive mutex "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             "twice from the same thread", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case m_UNLOCK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!SpMutexUnlock(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "mutex is not locked", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadRwMutexObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This procedure is invoked to process "thread::rwmutex" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadRWMutexObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData dummy;                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int opt, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t nameLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *mutexName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutexPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ReadWriteMutex *rwPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_AnyMutex **lockPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static const char *cmdOpts[] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "create", "destroy", "rlock", "wlock", "unlock", NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    enum options {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        w_CREATE, w_DESTROY, w_RLOCK, w_WLOCK, w_UNLOCK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::rwmutex create
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::rwmutex destroy <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::rwmutex rlock <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::rwmutex wlock <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::rwmutex unlock <mutexHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "option ?args?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_GetIndexFromObjStruct(interp, objv[1], cmdOpts, sizeof(char *), "option", 0, &opt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cover the "create" option first, since it needs no existing name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)w_CREATE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Obj *nameObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 1, objv, "create");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr = (SpMutex*)ckalloc(sizeof(SpMutex));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->type   = WMUTEXID;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->refcnt = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->bucket = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->hentry = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr->lock   = NULL; /* Will be auto-initialized */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nameObj = GetName(mutexPtr->type, (void*)mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexName = Tcl_GetString(nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AddMutex(mutexName, nameObj->length, mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * All other options require a valid name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 2, objv, "mutexHandle");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mutexName = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nameLen = objv[2]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try mutex destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)w_DESTROY) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = RemoveMutex(mutexName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ret == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            notfound:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "no such mutex \"", mutexName,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "mutex is in use", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try all other options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mutexPtr = GetMutex(mutexName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (mutexPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto notfound;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!IsReadWrite(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "wrong mutex type, must be readwrite", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lockPtr = &mutexPtr->lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr = (Sp_ReadWriteMutex*) lockPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch ((enum options)opt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case w_RLOCK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!Sp_ReadWriteMutexRLock(rwPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "read-locking already write-locked mutex ",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             "from the same thread", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case w_WLOCK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!Sp_ReadWriteMutexWLock(rwPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "write-locking the same read-write "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             "mutex twice from the same thread", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case w_UNLOCK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!Sp_ReadWriteMutexUnlock(rwPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "mutex is not locked", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadCondObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This procedure is invoked to process "thread::cond" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadCondObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData dummy;                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int opt, ret, timeMsec = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t nameLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *condvName, *mutexName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutexPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpCondv *condvPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static const char *cmdOpts[] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "create", "destroy", "notify", "wait", NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    enum options {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        c_CREATE, c_DESTROY, c_NOTIFY, c_WAIT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *    thread::cond create
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *    thread::cond destroy <condHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *    thread::cond notify <condHandle>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *    thread::cond wait <condHandle> <mutexHandle> ?timeout?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "option ?args?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_GetIndexFromObjStruct(interp, objv[1], cmdOpts, sizeof(char *), "option", 0, &opt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Cover the "create" option since it needs no existing name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)c_CREATE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Obj *nameObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 1, objv, "create");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr = (SpCondv*)ckalloc(sizeof(SpCondv));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr->refcnt = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr->bucket = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr->hentry = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr->mutex  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvPtr->cond   = NULL; /* Will be auto-initialized */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        nameObj = GetName(CONDVID, (void*)condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        condvName = Tcl_GetString(nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AddCondv(condvName, nameObj->length, condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, nameObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * All others require at least a valid handle.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 2, objv, "condHandle ?args?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    condvName = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nameLen = objv[2]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try variable destroy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (opt == (int)c_DESTROY) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = RemoveCondv(condvName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ret == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            notfound:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "no such condition variable \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 condvName, "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "condition variable is in use", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try all other options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    condvPtr = GetCondv(condvName, nameLen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (condvPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto notfound;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch ((enum options)opt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case c_WAIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * May improve the Tcl_ConditionWait() to report timeouts so we can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * inform script programmer about this interesting fact. I think
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * there is still a place for something like Tcl_ConditionWaitEx()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * or similar in the core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc < 4 || objc > 5) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 2, objv, "condHandle mutexHandle ?timeout?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc == 5) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (Tcl_GetIntFromObj(interp, objv[4], &timeMsec) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexName = Tcl_GetString(objv[3]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr  = GetMutex(mutexName, objv[3]->length);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (mutexPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "no such mutex \"",mutexName,"\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!IsExclusive(mutexPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            || SpCondvWait(condvPtr, mutexPtr, timeMsec) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "mutex not locked or wrong type", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case c_NOTIFY:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SpCondvNotify(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ThreadEvalObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This procedure is invoked to process "thread::eval" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadEvalObjCmd(dummy, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData dummy;                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, optx, internal;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *mutexName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *scriptObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutexPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static Sp_RecursiveMutex evalMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     thread::eval ?-lock <mutexHandle>? arg ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         "?-lock <mutexHandle>? arg ?arg...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Find out wether to use the internal (recursive) mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * or external mutex given on the command line, and lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the corresponding mutex immediately.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * We are using recursive internal mutex so we can easily
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * support the recursion w/o danger of deadlocking. If
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * however, user gives us an exclusive mutex, we will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * throw error on attempt to recursively call us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (OPT_CMP(Tcl_GetString(objv[1]), "-lock") == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        internal = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        optx = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_RecursiveMutexLock(&evalMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        internal = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        optx = 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((objc - optx) < 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto syntax;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexName = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mutexPtr  = GetMutex(mutexName, objv[2]->length);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (mutexPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "no such mutex \"",mutexName,"\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (IsReadWrite(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "wrong mutex type, must be exclusive "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             "or recursive", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!SpMutexLock(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "locking the same exclusive mutex "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             "twice from the same thread", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    objc -= optx;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Evaluate passed arguments as Tcl script. Note that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tcl_EvalObjEx throws away the passed object by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * doing an decrement reference count on it. This also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * means we need not build object bytecode rep.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        scriptObj = Tcl_DuplicateObj(objv[optx]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        scriptObj = Tcl_ConcatObj(objc, objv + optx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_IncrRefCount(scriptObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_EvalObjEx(interp, scriptObj, TCL_EVAL_DIRECT);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(scriptObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char msg[32 + TCL_INTEGER_SPACE];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* Next line generates a Deprecation warning when compiled with Tcl 8.6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * See Tcl bug #3562640 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sprintf(msg, "\n    (\"eval\" body line %d)", Tcl_GetErrorLine(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AddErrorInfo(interp, msg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Unlock the mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (internal) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_RecursiveMutexUnlock(&evalMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SpMutexUnlock(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetName --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Construct a Tcl name for the given sync primitive.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      The name is in the simple counted form: XidN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      where "X" designates the type of the primitive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      and "N" is a increasing integer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Tcl string object with the constructed name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Obj*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetName(int type, void *addrPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char name[32];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    unsigned int id;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static unsigned int idcounter;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    id = idcounter++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sprintf(name, "%cid%d", type, id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Tcl_NewStringObj(name, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetBucket --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Returns the bucket for the given name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Pointer to the bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpBucket*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetBucket(int type, const char *name, size_t len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case SP_MUTEX: return &muxBuckets[GetHash(name, len)];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case SP_CONDV: return &varBuckets[GetHash(name, len)];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return NULL; /* Never reached */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetAnyItem --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Retrieves the item structure from it's corresponding bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Item pointer or NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Increment the item's ref count preventing it's deletion.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpItem*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetAnyItem(int type, const char *name, size_t len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpItem *itemPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucketPtr = GetBucket(type, name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hashEntryPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hashEntryPtr = Tcl_FindHashEntry(&bucketPtr->handles, name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (hashEntryPtr != (Tcl_HashEntry*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        itemPtr = (SpItem*)Tcl_GetHashValue(hashEntryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        itemPtr->refcnt++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return itemPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * PutAnyItem --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Current thread detaches from the item.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Decrement item's ref count allowing for it's deletion
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      and signalize any threads waiting to delete the item.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PutAnyItem(SpItem *itemPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&itemPtr->bucket->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    itemPtr->refcnt--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionNotify(&itemPtr->bucket->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&itemPtr->bucket->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * AddAnyItem --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Puts any item in the corresponding bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AddAnyItem(int type, const char *handle, size_t len, SpItem *itemPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int new;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucketPtr = GetBucket(type, handle, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hashEntryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hashEntryPtr = Tcl_CreateHashEntry(&bucketPtr->handles, handle, &new);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetHashValue(hashEntryPtr, (ClientData)itemPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    itemPtr->refcnt = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    itemPtr->bucket = bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    itemPtr->hentry = hashEntryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * RemoveAnyItem --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Removes the item from it's bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Item's pointer or NULL if none found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SpItem *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RemoveAnyItem(int type, const char *name, size_t len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpItem *itemPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucketPtr = GetBucket(type, name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hashEntryPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hashEntryPtr = Tcl_FindHashEntry(&bucketPtr->handles, name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (hashEntryPtr == (Tcl_HashEntry*)NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    itemPtr = (SpItem*)Tcl_GetHashValue(hashEntryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteHashEntry(hashEntryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (itemPtr->refcnt > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&bucketPtr->cond, &bucketPtr->lock, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return itemPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * RemoveMutex --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Removes the mutex from it's bucket and finalizes it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is finalized and removed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not finalized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- +     -1 - mutex is not found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RemoveMutex(const char *name, size_t len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpMutex *mutexPtr = GetMutex(name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (mutexPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!SpMutexFinalize(mutexPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PutMutex(mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    RemoveAnyItem(SP_MUTEX, name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * RemoveCondv --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Removes the cond variable from it's bucket and finalizes it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - variable is finalized and removed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - variable is not finalized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- +     -1 - variable is not found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RemoveCondv(const char *name, size_t len)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpCondv *condvPtr = GetCondv(name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (condvPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!SpCondvFinalize(condvPtr)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PutCondv(condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    RemoveAnyItem(SP_CONDV, name, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)condvPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Create commands in current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Initializes shared hash table for storing sync primitive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      handles and pointers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_Init (interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Interp where to create cmds */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SpBucket *bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!initOnce) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!initOnce) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int ii;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            for (ii = 0; ii < NUMSPBUCKETS; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                bucketPtr = &muxBuckets[ii];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                memset(bucketPtr, 0, sizeof(SpBucket));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_InitHashTable(&bucketPtr->handles, TCL_STRING_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            for (ii = 0; ii < NUMSPBUCKETS; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                bucketPtr = &varBuckets[ii];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                memset(bucketPtr, 0, sizeof(SpBucket));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_InitHashTable(&bucketPtr->handles, TCL_STRING_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            initOnce = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"::mutex",   ThreadMutexObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"::rwmutex", ThreadRWMutexObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"::cond",    ThreadCondObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_CMD(interp, THREAD_CMD_PREFIX"::eval",    ThreadEvalObjCmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpMutexLock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Locks the typed mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked (pending deadlock?)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpMutexLock(SpMutex *mutexPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (mutexPtr->type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case EMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return Sp_ExclusiveMutexLock((Sp_ExclusiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case RMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return Sp_RecursiveMutexLock((Sp_RecursiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpMutexUnlock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Unlocks the typed mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is unlocked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex was not locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpMutexUnlock(SpMutex *mutexPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (mutexPtr->type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case EMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return Sp_ExclusiveMutexUnlock((Sp_ExclusiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case RMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return Sp_RecursiveMutexUnlock((Sp_RecursiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpMutexFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finalizes the typed mutex. This should never be called without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      some external mutex protection.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is finalized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is still in use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpMutexFinalize(SpMutex *mutexPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (AnyMutexIsLocked((Sp_AnyMutex*)mutexPtr->lock, (Tcl_ThreadId)0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * At this point, the mutex could be locked again, hence it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * is important never to call this function unprotected.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (mutexPtr->type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case EMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_ExclusiveMutexFinalize((Sp_ExclusiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case RMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_RecursiveMutexFinalize((Sp_RecursiveMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case WMUTEXID:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_ReadWriteMutexFinalize((Sp_ReadWriteMutex*)lockPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpCondvWait --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Waits on the condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - wait ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - not waited as mutex is not locked in the same thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpCondvWait(SpCondv *condvPtr, SpMutex *mutexPtr, int msec)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Sp_AnyMutex **lock = &mutexPtr->lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ExclusiveMutex_ *emPtr = *(Sp_ExclusiveMutex_**)lock;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Time waitTime, *wt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId threadId = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (msec > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        wt = &waitTime;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        wt->sec  = (msec/1000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        wt->usec = (msec%1000) * 1000;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!AnyMutexIsLocked((Sp_AnyMutex*)mutexPtr->lock, threadId)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Mutex not locked by the current thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * It is safe to operate on mutex struct because caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * is holding the emPtr->mutex locked before we enter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the Tcl_ConditionWait and after we return out of it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    condvPtr->mutex = mutexPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->owner = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->lockcount = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ConditionWait(&condvPtr->cond, &emPtr->mutex, wt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->owner = threadId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->lockcount = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    condvPtr->mutex = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpCondvNotify --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Signalizes the condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpCondvNotify(SpCondv *condvPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (condvPtr->cond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&condvPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SpCondvFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finalizes the condition variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - variable is finalized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - variable is in use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SpCondvFinalize(SpCondv *condvPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (condvPtr->mutex != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Somebody is waiting on the variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (condvPtr->cond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionFinalize(&condvPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ExclusiveMutexLock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Locks the exclusive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked; same thread tries to locks twice
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ExclusiveMutexLock(Sp_ExclusiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ExclusiveMutex_ *emPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thisThread = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate the mutex structure on first access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_ExclusiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*muxPtr == (Sp_ExclusiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *muxPtr = (Sp_ExclusiveMutex_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckalloc(sizeof(Sp_ExclusiveMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            memset(*muxPtr, 0, sizeof(Sp_ExclusiveMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try locking if not currently locked by anybody.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr = *(Sp_ExclusiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (emPtr->lockcount && emPtr->owner == thisThread) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Already locked by the same thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Many threads can come to this point.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Only one will succeed locking the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * mutex. Others will block...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&emPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->owner = thisThread;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->lockcount = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ExclusiveMutexIsLocked --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Checks wether the mutex is locked or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ExclusiveMutexIsLocked(Sp_ExclusiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return AnyMutexIsLocked((Sp_AnyMutex*)*muxPtr, (Tcl_ThreadId)0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ExclusiveMutexUnlock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Unlock the exclusive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is unlocked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ?      0 - mutex was never locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ExclusiveMutexUnlock(Sp_ExclusiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ExclusiveMutex_ *emPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_ExclusiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Never locked before */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr = *(Sp_ExclusiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (emPtr->lockcount == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Not locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->owner = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    emPtr->lockcount = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Only one thread should be able
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * to come to this point and unlock...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&emPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ExclusiveMutexFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finalize the exclusive mutex. It is not safe for two or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      more threads to finalize the mutex at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Mutex is destroyed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ExclusiveMutexFinalize(Sp_ExclusiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr != (Sp_ExclusiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_ExclusiveMutex_ *emPtr = *(Sp_ExclusiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (emPtr->lock) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexFinalize(&emPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (emPtr->mutex) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexFinalize(&emPtr->mutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)*muxPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_RecursiveMutexLock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Locks the recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked (as it always should be)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_RecursiveMutexLock(Sp_RecursiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_RecursiveMutex_ *rmPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thisThread = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate the mutex structure on first access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_RecursiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*muxPtr == (Sp_RecursiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *muxPtr = (Sp_RecursiveMutex_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckalloc(sizeof(Sp_RecursiveMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            memset(*muxPtr, 0, sizeof(Sp_RecursiveMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rmPtr = *(Sp_RecursiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rmPtr->owner == thisThread) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * We are already holding the mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * so just count one more lock.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           rmPtr->lockcount++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (rmPtr->owner == (Tcl_ThreadId)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Nobody holds the mutex, we do now.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   rmPtr->owner = thisThread;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   rmPtr->lockcount = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Somebody else holds the mutex; wait.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   while (1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ConditionWait(&rmPtr->cond, &rmPtr->lock, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           if (rmPtr->owner == (Tcl_ThreadId)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                   rmPtr->owner = thisThread;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                   rmPtr->lockcount = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                   break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_RecursiveMutexIsLocked --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Checks wether the mutex is locked or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_RecursiveMutexIsLocked(Sp_RecursiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return AnyMutexIsLocked((Sp_AnyMutex*)*muxPtr, (Tcl_ThreadId)0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_RecursiveMutexUnlock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Unlock the recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex unlocked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex never locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_RecursiveMutexUnlock(Sp_RecursiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_RecursiveMutex_ *rmPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_RecursiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Never locked before */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rmPtr = *(Sp_RecursiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rmPtr->lockcount == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Not locked now */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (--rmPtr->lockcount <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rmPtr->lockcount = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rmPtr->owner = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rmPtr->cond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionNotify(&rmPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_RecursiveMutexFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finalize the recursive mutex. It is not safe for two or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      more threads to finalize the mutex at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Mutex is destroyed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_RecursiveMutexFinalize(Sp_RecursiveMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr != (Sp_RecursiveMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_RecursiveMutex_ *rmPtr = *(Sp_RecursiveMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rmPtr->lock) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexFinalize(&rmPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rmPtr->cond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionFinalize(&rmPtr->cond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)*muxPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ReadWriteMutexRLock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Read-locks the reader/writer mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked as we already hold the write lock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ReadWriteMutexRLock(Sp_ReadWriteMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ReadWriteMutex_ *rwPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thisThread = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate the mutex structure on first access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*muxPtr == (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *muxPtr = (Sp_ReadWriteMutex_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckalloc(sizeof(Sp_ReadWriteMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            memset(*muxPtr, 0, sizeof(Sp_ReadWriteMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr = *(Sp_ReadWriteMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rwPtr->lockcount == -1 && rwPtr->owner == thisThread) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* We already hold the write lock */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (rwPtr->lockcount < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->numrd++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&rwPtr->rcond, &rwPtr->lock, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->numrd--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr->lockcount++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr->owner = (Tcl_ThreadId)0; /* Many threads can read-lock */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ReadWriteMutexWLock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Write-locks the reader/writer mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - same thread attempts to write-lock the mutex twice
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ReadWriteMutexWLock(Sp_ReadWriteMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ReadWriteMutex_ *rwPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId thisThread = Tcl_GetCurrentThread();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Allocate the mutex structure on first access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*muxPtr == (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *muxPtr = (Sp_ReadWriteMutex_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ckalloc(sizeof(Sp_ReadWriteMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            memset(*muxPtr, 0, sizeof(Sp_ReadWriteMutex_));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr = *(Sp_ReadWriteMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rwPtr->owner == thisThread && rwPtr->lockcount == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* The same thread attempts to write-lock again */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (rwPtr->lockcount != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->numwr++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionWait(&rwPtr->wcond, &rwPtr->lock, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->numwr--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr->lockcount = -1;     /* This designates the sole writer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr->owner = thisThread; /* which is our current thread     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ReadWriteMutexIsLocked --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Checks wether the mutex is locked or not.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ReadWriteMutexIsLocked(Sp_ReadWriteMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return AnyMutexIsLocked((Sp_AnyMutex*)*muxPtr, (Tcl_ThreadId)0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ReadWriteMutexUnlock --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Unlock the reader/writer mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ReadWriteMutexUnlock(Sp_ReadWriteMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_ReadWriteMutex_ *rwPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr == (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Never locked before */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rwPtr = *(Sp_ReadWriteMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rwPtr->lockcount == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0; /* Not locked now */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (--rwPtr->lockcount <= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->lockcount = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        rwPtr->owner = (Tcl_ThreadId)0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (rwPtr->numwr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&rwPtr->wcond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (rwPtr->numrd) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ConditionNotify(&rwPtr->rcond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sp_ReadWriteMutexFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finalize the reader/writer mutex. It is not safe for two or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      more threads to finalize the mutex at the same time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Mutex is destroyed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sp_ReadWriteMutexFinalize(Sp_ReadWriteMutex *muxPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*muxPtr != (Sp_ReadWriteMutex_*)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Sp_ReadWriteMutex_ *rwPtr = *(Sp_ReadWriteMutex_**)muxPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rwPtr->lock) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_MutexFinalize(&rwPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rwPtr->rcond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionFinalize(&rwPtr->rcond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (rwPtr->wcond) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ConditionFinalize(&rwPtr->wcond);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)*muxPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * AnyMutexIsLocked --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Checks wether the mutex is locked. If optional threadId
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      is given (i.e. != 0) it checks if the given thread also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      holds the lock.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      1 - mutex is locked (optionally by the given thread)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      0 - mutex is not locked (optionally by the given thread)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AnyMutexIsLocked(Sp_AnyMutex *mPtr, Tcl_ThreadId threadId)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int locked = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (mPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&mPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        locked = mPtr->lockcount != 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (locked && threadId != (Tcl_ThreadId)0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            locked = mPtr->owner == threadId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&mPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return locked;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSpCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSpCmd.h b/vendor/thread2.7.3/generic/threadSpCmd.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index e2c7c0771..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSpCmd.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,128 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is the header file for the module that implements some missing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * synchronization priomitives from the Tcl API.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SP_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SP_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The following structure defines a locking bucket. A locking
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * bucket is associated with a mutex and protects access to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * objects stored in bucket hash table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct SpBucket {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex lock;            /* For locking the bucket */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition cond;        /* For waiting on threads to release items */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashTable handles;     /* Hash table of given-out handles in bucket */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} SpBucket;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NUMSPBUCKETS 32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * All types of mutexes share this common part.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Sp_AnyMutex_ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int lockcount;              /* If !=0 mutex is locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numlocks;               /* Number of times the mutex got locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex lock;             /* Regular mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId owner;         /* Current lock owner thread (-1 = any) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Sp_AnyMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Implementation of the exclusive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Sp_ExclusiveMutex_ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int lockcount;              /* Flag: 1-locked, 0-not locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numlocks;               /* Number of times the mutex got locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex lock;             /* Regular mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId owner;         /* Current lock owner thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* --- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex mutex;            /* Mutex being locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Sp_ExclusiveMutex_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef Sp_ExclusiveMutex_* Sp_ExclusiveMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Implementation of the recursive mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Sp_RecursiveMutex_ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int lockcount;              /* # of times this mutex is locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numlocks;               /* Number of time the mutex got locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex lock;             /* Regular mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId owner;         /* Current lock owner thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* --- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition cond;         /* Wait to be allowed to lock the mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Sp_RecursiveMutex_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef Sp_RecursiveMutex_* Sp_RecursiveMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Implementation of the read/writer mutex.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Sp_ReadWriteMutex_ {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int lockcount;              /* >0: # of readers, -1: sole writer */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numlocks;               /* Number of time the mutex got locked */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Mutex lock;             /* Regular mutex */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ThreadId owner;         /* Current lock owner thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* --- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    unsigned int numrd;            /* # of readers waiting for lock */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    unsigned int numwr;         /* # of writers waiting for lock */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition rcond;        /* Reader lockers wait here */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Condition wcond;        /* Writer lockers wait here */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Sp_ReadWriteMutex_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef Sp_ReadWriteMutex_* Sp_ReadWriteMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * API for exclusive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ExclusiveMutexLock(Sp_ExclusiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ExclusiveMutexIsLocked(Sp_ExclusiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ExclusiveMutexUnlock(Sp_ExclusiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void Sp_ExclusiveMutexFinalize(Sp_ExclusiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * API for recursive mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_RecursiveMutexLock(Sp_RecursiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_RecursiveMutexIsLocked(Sp_RecursiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_RecursiveMutexUnlock(Sp_RecursiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void Sp_RecursiveMutexFinalize(Sp_RecursiveMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * API for reader/writer mutexes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ReadWriteMutexRLock(Sp_ReadWriteMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ReadWriteMutexWLock(Sp_ReadWriteMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ReadWriteMutexIsLocked(Sp_ReadWriteMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int  Sp_ReadWriteMutexUnlock(Sp_ReadWriteMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void Sp_ReadWriteMutexFinalize(Sp_ReadWriteMutex *mutexPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _SP_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSpCmd.h,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvCmd.c b/vendor/thread2.7.3/generic/threadSvCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index b8d90c0db..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,2325 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements a family of commands for sharing variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Initial code is taken from nsd/tclvar.c found in AOLserver 3.+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * distribution and modified to support Tcl 8.0+ command object interface
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * and internal storage in private shared Tcl objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvListCmd.h"    /* Shared variants of list commands */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvKeylistCmd.h" /* Shared variants of list commands */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "psGdbm.h"             /* The gdbm persistent store implementation */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Number of buckets to spread shared arrays into. Each bucket is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * associated with one mutex so locking a bucket locks all arrays
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * in that bucket as well. The number of buckets should be a prime.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NUMBUCKETS 31
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Number of object containers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to allocate in one shot.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define OBJS_TO_ALLOC_EACH_TIME 100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Reference to Tcl object types used in object-copy code.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Those are referenced read-only, thus no mutex protection.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType* booleanObjTypePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType* byteArrayObjTypePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType* doubleObjTypePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType* intObjTypePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const Tcl_ObjType* stringObjTypePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * In order to be fully stub enabled, a small
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * hack is needed to query the tclEmptyStringRep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * global symbol defined by Tcl. See Sv_Init.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static char *Sv_tclEmptyStringRep = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Global variables used within this file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Bucket*    buckets;      /* Array of buckets. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex  bucketsMutex; /* Protects the array of buckets */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static SvCmdInfo* svCmdInfo;    /* Linked list of registered commands */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static RegType*   regType;      /* Linked list of registered obj types */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static PsStore*   psStore;      /* Linked list of registered pers. stores */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex  svMutex;      /* Protects inserts into above lists */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex  initMutex;    /* Serializes initialization issues */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The standard commands found in NaviServer/AOLserver nsv_* interface.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * For sharp-eye readers: the implementation of the "lappend" command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * is moved to new list-command package, since it really belongs there.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvObjObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvAppendObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvIncrObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvSetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvExistsObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvGetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvArrayObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvUnsetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvNamesObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * New commands added to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * standard set of nsv_*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvPopObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvMoveObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLockObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Forward declarations for functions to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * manage buckets, arrays and shared objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Container* CreateContainer(Array*, Tcl_HashEntry*, Tcl_Obj*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Container* AcquireContainer(Array*, const char*, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Array* CreateArray(Bucket*, const char*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Array* LockArray(Tcl_Interp*, const char*, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int ReleaseContainer(Tcl_Interp*, Container*, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int DeleteContainer(Container*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int FlushArray(Array*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int DeleteArray(Array*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void SvAllocateContainers(Bucket*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void SvRegisterStdCommands(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SV_FINALIZE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef SV_FINALIZE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void SvFinalizeContainers(Bucket*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void SvFinalize(ClientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* SV_FINALIZE */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static PsStore* GetPsStore(const char *handle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int SvObjDispatchObjCmd(ClientData arg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterCommand --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Utility to register commands to be loaded at module start.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      New command will be added to a linked list of registered commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterCommand(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   const char *cmdName,                /* Name of command to register */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   Tcl_ObjCmdProc *objProc,            /* Object-based command procedure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   Tcl_CmdDeleteProc *delProc,         /* Command delete procedure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   int aolSpecial)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int len = strlen(cmdName) + strlen(TSV_CMD_PREFIX) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int len2 = strlen(cmdName) + strlen(TSV_CMD2_PREFIX) + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SvCmdInfo *newCmd = (SvCmdInfo*)ckalloc(sizeof(SvCmdInfo) + len + len2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Setup new command structure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->cmdName = (char*)((char*)newCmd + sizeof(SvCmdInfo));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->cmdName2 = newCmd->cmdName + len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->aolSpecial = aolSpecial;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->objProcPtr = objProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->delProcPtr = delProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Rewrite command name. This is needed so we can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * easily turn-on the compatiblity with NaviServer/AOLserver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * command names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    strcpy(newCmd->cmdName, TSV_CMD_PREFIX);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    strcat(newCmd->cmdName, cmdName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newCmd->name = newCmd->cmdName + strlen(TSV_CMD_PREFIX);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    strcpy(newCmd->cmdName2, TSV_CMD2_PREFIX);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    strcat(newCmd->cmdName2, cmdName);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Plug-in in shared list of commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svCmdInfo == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svCmdInfo = newCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newCmd->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newCmd->nextPtr = svCmdInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svCmdInfo = newCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterObjType --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Registers custom object duplicator function for a specific
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      object type. Registered function will be called by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      private object creation routine every time an object is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      plugged out or in the shared array. This way we assure that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Tcl objects do not get shared per-reference between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterObjType(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   const Tcl_ObjType *typePtr,               /* Type of object to register */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   Tcl_DupInternalRepProc *dupProc)    /* Custom object duplicator */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    RegType *newType = (RegType*)ckalloc(sizeof(RegType));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Setup new type structure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newType->typePtr = typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newType->dupIntRepProc = dupProc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Plug-in in shared list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newType->nextPtr = regType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regType = newType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterPsStore --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Registers a handler to the persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterPsStore(const PsStore *psStorePtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PsStore *psPtr = (PsStore*)ckalloc(sizeof(PsStore));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *psPtr = *psStorePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Plug-in in shared list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (psStore == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psStore = psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psStore->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psPtr->nextPtr = psStore;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psStore = psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_GetContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This is the workhorse of the module. It returns the container
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      with the shared Tcl object. It also locks the container, so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      when finished with operation on the Tcl object, one has to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      unlock the container by calling the Sv_PutContainer().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      If instructed, this command might also create new container
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      with empty Tcl object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      New container might be created.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_GetContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                int objc,                           /* Number of arguments */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Obj *const objv[],              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Container **retObj,                 /* OUT: shared object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                int *offset,                        /* Shift in argument list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                int flags)                          /* Options for locking shared array */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *array, *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*retObj == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Array *arrayPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Parse mandatory arguments: <cmd> array key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 1, objv, "array key ?args?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key   = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *offset = 3; /* Consumed three arguments: cmd, array, key */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Lock the shared array and locate the shared object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        arrayPtr = LockArray(interp, array, flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *retObj = AcquireContainer(arrayPtr, Tcl_GetString(objv[2]), flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*retObj == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "no key ", array, "(", key, ")", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_HashTable *handles = &((*retObj)->bucketPtr->handles);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        LOCK_CONTAINER(*retObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_FindHashEntry(handles, (char*)(*retObj)) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            UNLOCK_CONTAINER(*retObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewStringObj("key has been deleted", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_BREAK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *offset = 2; /* Consumed two arguments: object, cmd */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_PutContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Releases the container obtained by the Sv_GetContainer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      For bound arrays, update the underlying persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_PutContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Interp *interp,               /* For error reporting; might be NULL */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Container *svObj,                 /* Shared object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                int mode)                         /* One of SV_XXX modes */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = ReleaseContainer(interp, svObj, mode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UnlockArray(svObj->arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetPsStore --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Performs a lookup in the list of registered persistent storage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      handlers. If the match is found, duplicates the persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      storage record and passes the copy to the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Pointer to the newly allocated persistent storage handler. Caller
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      must free this block when done with it. If none found, returns NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated. Caller should free the return value of this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      function using ckfree().
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static PsStore*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetPsStore(const char *handle)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *type = handle;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *addr, *delimiter = strchr(handle, ':');
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PsStore *tmpPtr, *psPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Expect the handle in the following format: <type>:<address>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * where "type" must match one of the registered presistent store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * types (gdbm, tcl, whatever) and <address> is what is passed to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * the open procedure of the registered store.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Example: gdbm:/path/to/gdbm/file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Try to see wether some array is already bound to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * same persistent storage address.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; i < NUMBUCKETS; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Bucket *bucketPtr = &buckets[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        LOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        hPtr = Tcl_FirstHashEntry(&bucketPtr->arrays, &search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Array *arrayPtr = (Array*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (arrayPtr->bindAddr && arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (strcmp(arrayPtr->bindAddr, handle) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    UNLOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return NULL; /* Array already bound */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            hPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        UNLOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Split the address and storage handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (delimiter == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        addr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *delimiter = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        addr = delimiter + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * No array was bound to the same persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Lookup the persistent storage to bind to.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (tmpPtr = psStore; tmpPtr; tmpPtr = tmpPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (strcmp(tmpPtr->type, type) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tmpPtr->psHandle = tmpPtr->psOpen(addr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (tmpPtr->psHandle) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                psPtr = (PsStore*)ckalloc(sizeof(PsStore));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                *psPtr = *tmpPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                psPtr->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (delimiter) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *delimiter = ':';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * AcquireContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Finds a variable within an array and returns it's container.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Pointer to variable object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      New variable may be created. For bound arrays, try to locate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      the key in the persistent storage as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Container *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AcquireContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 Array *arrayPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 const char *key,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 int flags)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int new;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *tclObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&arrayPtr->vars, key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (hPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PsStore *psPtr = arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char *val = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            size_t len = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (psPtr->psGet(psPtr->psHandle, key, &val, &len) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                tclObj = Tcl_NewStringObj(val, len);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                psPtr->psFree(val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!(flags & FLAGS_CREATEVAR) && tclObj == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (tclObj == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tclObj = Tcl_NewObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        hPtr = Tcl_CreateHashEntry(&arrayPtr->vars, key, &new);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetHashValue(hPtr, CreateContainer(arrayPtr, hPtr, tclObj));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return (Container*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ReleaseContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Does some post-processing on the used container. This is mostly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      needed when the container has been modified and needs to be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      saved in the bound persistent storage.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Persistent storage, if bound, might be modified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ReleaseContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 Tcl_Interp *interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 Container *svObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 int mode)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const PsStore *psPtr = svObj->arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *key, *val;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (mode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case SV_UNCHANGED: return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case SV_ERROR:     return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case SV_CHANGED:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            key = Tcl_GetHashKey(&svObj->arrayPtr->vars, svObj->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            val = Tcl_GetString(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            len = svObj->tclObj->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (psPtr->psPut(psPtr->psHandle, key, val, len) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                const char *err = psPtr->psError(psPtr->psHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR; /* Should never be reached */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * CreateContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Creates new shared container holding Tcl object to be stored
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      in the shared array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      The container pointer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Container *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CreateContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Array *arrayPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_HashEntry *entryPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Obj *tclObj)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr->bucketPtr->freeCt == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        SvAllocateContainers(arrayPtr->bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj = arrayPtr->bucketPtr->freeCt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr->bucketPtr->freeCt = svObj->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->arrayPtr  = arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->bucketPtr = arrayPtr->bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->tclObj    = tclObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->entryPtr  = entryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->handlePtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->tclObj) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return svObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DeleteContainer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Destroys the container and the Tcl object within it. For bound
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      shared arrays, the underlying persistent store is updated as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets reclaimed. If the shared array was bound to persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      storage, it removes the corresponding record.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DeleteContainer(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Container *svObj)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->tclObj) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->handlePtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DeleteHashEntry(svObj->handlePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->entryPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PsStore *psPtr = svObj->arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char *key = Tcl_GetHashKey(&svObj->arrayPtr->vars,svObj->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (psPtr->psDelete(psPtr->psHandle, key) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DeleteHashEntry(svObj->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->arrayPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->entryPtr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->handlePtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->tclObj    = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->nextPtr = svObj->bucketPtr->freeCt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->bucketPtr->freeCt = svObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * LockArray --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Find (or create) the array structure for shared array and lock it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Array structure must be later unlocked with UnlockArray.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      TCL_OK or TCL_ERROR if no such array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Sets *arrayPtrPtr with Array pointer or leave error in given interp.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Array *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LockArray(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          Tcl_Interp *interp,                 /* Interpreter to leave result. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          const char *array,                  /* Name of array to lock */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          int flags)                          /* FLAGS_CREATEARRAY/FLAGS_NOERRMSG*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register const char *p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register unsigned int result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Bucket *bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Compute a hash to map an array to a bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    p = array;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (*p++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        i = *p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result += (result << 3) + i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    i = result % NUMBUCKETS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    bucketPtr = &buckets[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Lock the bucket and find the array, or create a new one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * The bucket will be left locked on success.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LOCK_BUCKET(bucketPtr); /* Note: no matching unlock below ! */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (flags & FLAGS_CREATEARRAY) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        arrayPtr = CreateArray(bucketPtr, array);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&bucketPtr->arrays, array);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (hPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            UNLOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (!(flags & FLAGS_NOERRMSG)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, "\"", array,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                 "\" is not a thread shared array", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        arrayPtr = (Array*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * FlushArray --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Unset all keys in an array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Array is cleaned but it's variable hash-hable still lives.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      For bound arrays, the persistent store is updated accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FlushArray(Array *arrayPtr)                    /* Name of array to flush */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (hPtr = Tcl_FirstHashEntry(&arrayPtr->vars, &search); hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         hPtr = Tcl_NextHashEntry(&search)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (DeleteContainer((Container*)Tcl_GetHashValue(hPtr)) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * CreateArray --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Creates new shared array instance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Pointer to the newly created array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Array *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CreateArray(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Bucket *bucketPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *arrayName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int new;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hPtr = Tcl_CreateHashEntry(&bucketPtr->arrays, arrayName, &new);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!new) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return (Array*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr = (Array*)ckalloc(sizeof(Array));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr->bucketPtr = bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr->entryPtr  = hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr->psPtr     = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr->bindAddr  = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_InitHashTable(&arrayPtr->vars, TCL_STRING_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetHashValue(hPtr, arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DeleteArray --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Deletes the shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DeleteArray(Array *arrayPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (FlushArray(arrayPtr) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PsStore *psPtr = arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (psPtr->psClose(psPtr->psHandle) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)arrayPtr->psPtr), arrayPtr->psPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr->bindAddr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree(arrayPtr->bindAddr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr->entryPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DeleteHashEntry(arrayPtr->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DeleteHashTable(&arrayPtr->vars);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvAllocateContainers --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Any similarity with the Tcl AllocateFreeObj function is purely
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      coincidental... Just joking; this is (almost) 100% copy of it! :-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Allocates memory for many containers at the same time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvAllocateContainers(Bucket *bucketPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container tmp[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t objSizePlusPadding = (size_t)(((char*)(tmp+1))-(char*)tmp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t bytesToAlloc = (OBJS_TO_ALLOC_EACH_TIME * objSizePlusPadding);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *basePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register Container *prevPtr = NULL, *objPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    basePtr = (char*)ckalloc(bytesToAlloc);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    memset(basePtr, 0, bytesToAlloc);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    objPtr = (Container*)basePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    objPtr->chunkAddr = basePtr; /* Mark chunk address for reclaim */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; i < OBJS_TO_ALLOC_EACH_TIME; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        objPtr->nextPtr = prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        prevPtr = objPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        objPtr = (Container*)(((char*)objPtr) + objSizePlusPadding);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    bucketPtr->freeCt = prevPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef SV_FINALIZE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvFinalizeContainers --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Reclaim memory for free object containers per bucket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Memory gets reclaimed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvFinalizeContainers(Bucket *bucketPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Container *tmpPtr, *objPtr = bucketPtr->freeCt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (objPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objPtr->chunkAddr == (char*)objPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tmpPtr = objPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            objPtr = tmpPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            objPtr = objPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* SV_FINALIZE */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_DuplicateObj --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Create and return a new object that is (mostly) a duplicate of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  argument object. We take care that the duplicate object is either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  a proper object copy, i.e. w/o hidden references to original object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  elements or a plain string object, i.e one w/o internal representation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Decision about wether to produce a real duplicate or a string object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  is done as follows:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     1) Scalar Tcl object types are properly copied by default;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        these include: boolean, int double, string and byteArray types.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     2) Object registered with Sv_RegisterObjType are duplicated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        using custom duplicator function which is guaranteed to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        produce a proper deep copy of the object in question.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *     3) All other object types are stringified; these include
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        miscelaneous Tcl objects (cmdName, nsName, bytecode, etc, etc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        and all user-defined objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      The return value is a pointer to a newly created Tcl_Obj. This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      object has reference count 0 and the same type, if any, as the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      source object objPtr. Also:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        1) If the source object has a valid string rep, we copy it;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *           otherwise, the new string rep is marked invalid.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        2) If the source object has an internal representation (i.e. its
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *           typePtr is non-NULL), the new object's internal rep is set to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *           a copy; otherwise the new internal rep is marked invalid.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Some object may, when copied, loose their type, i.e. will become
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  just plain string objects.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Tcl_Obj *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_DuplicateObj(objPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register Tcl_Obj *objPtr;        /* The object to duplicate. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register Tcl_Obj *dupPtr = Tcl_NewObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle the internal rep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objPtr->typePtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objPtr->typePtr->dupIntRepProc == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            dupPtr->internalRep = objPtr->internalRep;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            dupPtr->typePtr = objPtr->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_InvalidateStringRep(dupPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (   objPtr->typePtr == booleanObjTypePtr    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || objPtr->typePtr == byteArrayObjTypePtr  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || objPtr->typePtr == doubleObjTypePtr     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || objPtr->typePtr == intObjTypePtr        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                || objPtr->typePtr == stringObjTypePtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * Cover all "safe" obj types (see header comment)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              (*objPtr->typePtr->dupIntRepProc)(objPtr, dupPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_InvalidateStringRep(dupPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                int found = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                register RegType *regPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * Cover special registered types. Assume not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * very many of those, so this sequential walk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * should be fast enough.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                for (regPtr = regType; regPtr; regPtr = regPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if (objPtr->typePtr == regPtr->typePtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        (*regPtr->dupIntRepProc)(objPtr, dupPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        Tcl_InvalidateStringRep(dupPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        found = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * Assure at least string rep of the source
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                * is present, which will be copied below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (found == 0 && objPtr->bytes == NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    && objPtr->typePtr->updateStringProc != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    (*objPtr->typePtr->updateStringProc)(objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle the string rep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objPtr->bytes == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dupPtr->bytes = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (objPtr->bytes != Sv_tclEmptyStringRep) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* A copy of TclInitStringRep macro */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dupPtr->bytes = (char*)ckalloc((unsigned)objPtr->length + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objPtr->length > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            memcpy((void*)dupPtr->bytes,(void*)objPtr->bytes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   (unsigned)objPtr->length);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dupPtr->length = objPtr->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dupPtr->bytes[objPtr->length] = '\0';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return dupPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvObjDispatchObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      The method command for dispatching sub-commands of the shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Depends on the dispatched command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvObjDispatchObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ClientData arg,                     /* Pointer to object container. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *cmdName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SvCmdInfo *cmdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "args");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    cmdName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Do simple linear search. We may later replace this list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * with the hash table to gain speed. Currently, the list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * of registered commands is so small, so this will work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * fast enough.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (cmdPtr = svCmdInfo; cmdPtr; cmdPtr = cmdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!strcmp(cmdPtr->name, cmdName)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return (*cmdPtr->objProcPtr)(arg, interp, objc, objv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_AppendResult(interp, "invalid command name \"", cmdName, "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvObjObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Creates the object command for a shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      New Tcl command gets created.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvObjObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ClientData arg,                     /* != NULL if aolSpecial */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int new, off, ret, flg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char buf[128];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *val = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax: sv::object array key ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_BREAK: /* Shared array was not found */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((objc - off)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            val = objv[off];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svObj->tclObj = Sv_DuplicateObj(val ? val : Tcl_NewObj());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->handlePtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_HashTable *handles = &svObj->arrayPtr->bucketPtr->handles;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svObj->handlePtr = Tcl_CreateHashEntry(handles, (char*)svObj, &new);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Format the command name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sprintf(buf, "::%p", (int*)svObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->aolSpecial = (arg != NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CreateObjCommand(interp, buf, (ClientData)SvObjDispatchObjCmd, (ClientData)svObj, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvArrayObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::array" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvArrayObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              ClientData arg,                     /* Pointer to object container. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, argx = 0, lobjc = 0, index, ret = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *arrayName = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **lobjv = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj, *elObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static const char *opts[] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "set",  "reset", "get", "names", "size", "exists", "isbound",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "bind", "unbind", NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    enum options {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ASET,   ARESET,  AGET,  ANAMES,  ASIZE,  AEXISTS, AISBOUND,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ABIND,  AUNBIND
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "option array");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayName = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr  = LockArray(interp, arrayName, FLAGS_NOERRMSG);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        argx = 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Tcl_GetIndexFromObjStruct(interp,objv[1],opts, sizeof(char *),"option",0,&index) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == AEXISTS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetIntObj(Tcl_GetObjResult(interp), arrayPtr!=0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == AISBOUND) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetIntObj(Tcl_GetObjResult(interp), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetIntObj(Tcl_GetObjResult(interp), arrayPtr->psPtr!=0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == ASIZE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetIntObj(Tcl_GetObjResult(interp), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetWideIntObj(Tcl_GetObjResult(interp),arrayPtr->vars.numEntries);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == ASET || index == ARESET) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (argx == (objc - 1)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (argx && Tcl_ListObjGetElements(interp, objv[argx], &lobjc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    &lobjv) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lobjc = objc - 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lobjv = (Tcl_Obj**)objv + 3;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (lobjc & 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "list must have an even number"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    " of elements", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr = LockArray(interp, arrayName, FLAGS_CREATEARRAY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (index == ARESET) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = FlushArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    PsStore *psPtr = arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    const char *err = psPtr->psError(psPtr->psHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for (i = 0; i < lobjc; i += 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *key = Tcl_GetString(lobjv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            elObj = AcquireContainer(arrayPtr, key, FLAGS_CREATEVAR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(elObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            elObj->tclObj = Sv_DuplicateObj(lobjv[i+1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_IncrRefCount(elObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ReleaseContainer(interp, elObj, SV_CHANGED) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == AGET || index == ANAMES) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *resObj = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *pattern = (argx == 0) ? NULL : Tcl_GetString(objv[argx]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(&arrayPtr->vars,&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            while (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                char *key = Tcl_GetHashKey(&arrayPtr->vars, hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (pattern == NULL || Tcl_StringMatch(key, pattern)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Tcl_ListObjAppendElement(interp, resObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            Tcl_NewStringObj(key, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if (index == AGET) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        elObj = (Container*)Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        Tcl_ListObjAppendElement(interp, resObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                Sv_DuplicateObj(elObj->tclObj));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                hPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, resObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == ABIND) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * This is more complex operation, requiring some clarification.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * When binding an already existing array, we walk the array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * first and store all key/value pairs found there in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * persistent storage. Then we proceed with the below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * When binding an non-existent array, we open the persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * storage and cache all key/value pairs found there into tne
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * newly created shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        PsStore *psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char *psurl, *key = NULL, *val = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc < 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_WrongNumArgs(interp, 2, objv, "array handle");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr && arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "array is already bound", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psurl = Tcl_GetString(objv[3]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        len = objv[3]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        psPtr = GetPsStore(psurl);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (psPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "can't open persistent storage on \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             psurl, "\"", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(&arrayPtr->vars,&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr->psPtr = psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr->bindAddr = strcpy(ckalloc(len+1), psurl);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            while (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                svObj = Tcl_GetHashValue(hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (ReleaseContainer(interp, svObj, SV_CHANGED) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                hPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr = LockArray(interp, arrayName, FLAGS_CREATEARRAY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr->psPtr = psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            arrayPtr->bindAddr = strcpy(ckalloc(len+1), psurl);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (!psPtr->psFirst(psPtr->psHandle, &key, &val, &len)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                psPtr->psFree(val); /* What a waste! */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                AcquireContainer(arrayPtr, key, FLAGS_CREATEVAR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } while (!psPtr->psNext(psPtr->psHandle, &key, &val, &len));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index == AUNBIND) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (arrayPtr && arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PsStore *psPtr = arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (psPtr->psClose(psPtr->psHandle) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                const char *err = psPtr->psError(psPtr->psHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)arrayPtr->psPtr), arrayPtr->psPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "shared variable is not bound", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmdExit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmdExit:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvUnsetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::unset" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvUnsetObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              ClientData dummy,                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ii;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *arrayName;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "array ?key ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayName = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr  = LockArray(interp, arrayName, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (arrayPtr == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (DeleteArray(arrayPtr) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for (ii = 2; ii < objc; ii++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *key = Tcl_GetString(objv[ii]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&arrayPtr->vars, key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (DeleteContainer((Container*)Tcl_GetHashValue(hPtr))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp,"no key ",arrayName,"(",key,")",NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvNamesObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::names" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvNamesObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              ClientData arg,                     /* != NULL if aolSpecial */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *pattern = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *resObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 1, objv, "?pattern?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        pattern = Tcl_GetString(objv[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    resObj = Tcl_NewListObj(0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; i < NUMBUCKETS; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Bucket *bucketPtr = &buckets[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        LOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        hPtr = Tcl_FirstHashEntry(&bucketPtr->arrays, &search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (hPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char *key = Tcl_GetHashKey(&bucketPtr->arrays, hPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if ((arg==NULL || (*key != '.')) /* Hide .<name> arrays for AOL*/ &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                (pattern == NULL || Tcl_StringMatch(key, pattern))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ListObjAppendElement(interp, resObj,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        Tcl_NewStringObj(key, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            hPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        UNLOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, resObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvGetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process "tsv::get" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvGetObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ClientData arg,                     /* Pointer to object container. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int off, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *res;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::get array key ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object get ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_BREAK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    res = Sv_DuplicateObj(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, res);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_ObjSetVar2(interp, objv[off], NULL, res, 0) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(res);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvExistsObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process "tsv::exists" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvExistsObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ClientData arg,                     /* Pointer to object container. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int off, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::exists array key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object exists
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_BREAK: /* Array/key not found */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvSetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::set" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvSetObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ClientData arg,                     /* Pointer to object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, flg, mode;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *val;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::set array key ?value?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object set ?value?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_BREAK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        val = objv[off];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svObj->tclObj = Sv_DuplicateObj(val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_IncrRefCount(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mode = SV_CHANGED;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        val = Sv_DuplicateObj(svObj->tclObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        mode = SV_UNCHANGED;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, mode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvIncrObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::incr" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvIncrObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             ClientData arg,                     /* Pointer to object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int off, ret, flg, new = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_WideInt incrValue = 1, currValue = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::incr array key ?increment?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object incr ?increment?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_BREAK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        new = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Tcl_GetWideIntFromObj(interp, objv[off], &incrValue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (new) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        currValue = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Tcl_GetWideIntFromObj(interp, svObj->tclObj, &currValue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    incrValue += currValue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetWideIntObj(svObj->tclObj, incrValue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetWideIntObj(Tcl_GetObjResult(interp), incrValue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvAppendObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::append" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvAppendObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ClientData arg,                     /* Pointer to object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, off, flg, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::append array key value ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object append value ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "value ?value ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = off; i < objc; ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendObjToObj(svObj->tclObj, Sv_DuplicateObj(objv[i]));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Sv_DuplicateObj(svObj->tclObj));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvPopObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process "tsv::pop" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvPopObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ClientData arg,                     /* Pointer to object container */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *retObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::pop array key ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object pop ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Note: the object command will run into error next time !
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch (ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_BREAK:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case TCL_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr = svObj->arrayPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    retObj = svObj->tclObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->tclObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (DeleteContainer(svObj) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (svObj->arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PsStore *psPtr = svObj->arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *err = psPtr->psError(psPtr->psHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewStringObj(err,-1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_exit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, retObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_ObjSetVar2(interp, objv[off], NULL, retObj, 0) == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ret = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_exit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  cmd_exit:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(retObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvMoveObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::move" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvMoveObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             ClientData arg,                     /* Pointer to object container. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, new;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *toKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::move array key to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $object move to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    toKey = Tcl_GetString(objv[off]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hPtr = Tcl_CreateHashEntry(&svObj->arrayPtr->vars, toKey, &new);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!new) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "key \"", toKey, "\" exists", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svObj->entryPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char *key = Tcl_GetHashKey(&svObj->arrayPtr->vars, svObj->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (svObj->arrayPtr->psPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            PsStore *psPtr = svObj->arrayPtr->psPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (psPtr->psDelete(psPtr->psHandle, key) == -1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                const char *err = psPtr->psError(psPtr->psHandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DeleteHashEntry(svObj->entryPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    svObj->entryPtr = hPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetHashValue(hPtr, svObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLockObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    This procedure is invoked to process "tsv::lock" Tcl command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLockObjCmd(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             ClientData dummy,                   /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Interp *interp,                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             int objc,                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             Tcl_Obj *const objv[])              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *scriptObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Bucket *bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *     tsv::lock array arg ?arg ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc < 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_WrongNumArgs(interp, 1, objv, "array arg ?arg...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    arrayPtr  = LockArray(interp, Tcl_GetString(objv[1]), FLAGS_CREATEARRAY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    bucketPtr = arrayPtr->bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Evaluate passed arguments as Tcl script. Note that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Tcl_EvalObjEx throws away the passed object by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * doing an decrement reference count on it. This also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * means we need not build object bytecode rep.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc == 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        scriptObj = Tcl_DuplicateObj(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        scriptObj = Tcl_ConcatObj(objc-2, objv + 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_AllowExceptions(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_EvalObjEx(interp, scriptObj, TCL_EVAL_DIRECT);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        char msg[32 + TCL_INTEGER_SPACE];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* Next line generates a Deprecation warning when compiled with Tcl 8.6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * See Tcl bug #3562640 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sprintf(msg, "\n    (\"eval\" body line %d)", Tcl_GetErrorLine(interp));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AddErrorInfo(interp, msg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * We unlock the bucket directly, w/o going to Sv_Unlock()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * since it needs the array which may be unset by the script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UNLOCK_BUCKET(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterStdCommands --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Register standard shared variable commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvRegisterStdCommands(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static int initialized = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("var",    SvObjObjCmd,    NULL, 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("object", SvObjObjCmd,    NULL, 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("set",    SvSetObjCmd,    NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("unset",  SvUnsetObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("get",    SvGetObjCmd,    NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("incr",   SvIncrObjCmd,   NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("exists", SvExistsObjCmd, NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("append", SvAppendObjCmd, NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("array",  SvArrayObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("names",  SvNamesObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("pop",    SvPopObjCmd,    NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("move",   SvMoveObjCmd,   NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lock",   SvLockObjCmd,   NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            initialized = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_Init --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Creates commands in current interpreter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Many new command created in current interpreter. Global data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    structures used by them initialized as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_Init (interp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Bucket *bucketPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SvCmdInfo *cmdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const Tcl_UniChar no[3] = {'n', 'o', 0} ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *obj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Add keyed-list datatype
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TclX_KeyedListInit(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sv_RegisterKeylistCommands();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Register standard (nsv_* compatible) and our
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * own extensive set of list manipulating commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SvRegisterStdCommands();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sv_RegisterListCommands();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Get Tcl object types. These are used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * in custom object duplicator function.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    obj = Tcl_NewUnicodeObj(no, -1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    stringObjTypePtr = obj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_GetBooleanFromObj(NULL, obj, &i);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    booleanObjTypePtr   = obj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(obj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    obj = Tcl_NewByteArrayObj((unsigned char *)no, 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    byteArrayObjTypePtr = obj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(obj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    obj = Tcl_NewDoubleObj(0.0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    doubleObjTypePtr    = obj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(obj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    obj = Tcl_NewIntObj(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    intObjTypePtr       = obj->typePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(obj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Plug-in registered commands in current interpreter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (cmdPtr = svCmdInfo; cmdPtr; cmdPtr = cmdPtr->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_CreateObjCommand(interp, cmdPtr->cmdName, cmdPtr->objProcPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                (ClientData)0, (Tcl_CmdDeleteProc*)0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_CreateObjCommand(interp, cmdPtr->cmdName2, cmdPtr->objProcPtr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                (ClientData)(size_t)cmdPtr->aolSpecial, (Tcl_CmdDeleteProc*)0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create array of buckets and initialize each bucket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (buckets == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&bucketsMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (buckets == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            buckets = (Bucket *)ckalloc(sizeof(Bucket) * NUMBUCKETS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Tcl_CreateExitHandler(SvFinalize, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            for (i = 0; i < NUMBUCKETS; ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                bucketPtr = &buckets[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                memset(bucketPtr, 0, sizeof(Bucket));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_InitHashTable(&bucketPtr->arrays, TCL_STRING_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_InitHashTable(&bucketPtr->handles, TCL_ONE_WORD_KEYS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * There is no other way to get Sv_tclEmptyStringRep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * pointer value w/o this trick.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_Obj *dummy = Tcl_NewObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Sv_tclEmptyStringRep = dummy->bytes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DecrRefCount(dummy);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef HAVE_GDBM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             * Register persistent store handlers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterGdbmStore();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&bucketsMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef SV_FINALIZE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Left for reference, but unused since multithreaded finalization is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * unsolvable in the general case. Brave souls can revive this by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * installing a late exit handler on Thread's behalf, bringing the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * function back onto the Tcl_Finalize (but not Tcl_Exit) path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvFinalize --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Unset all arrays and reclaim all buckets.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *    Memory gets reclaimed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvFinalize (ClientData clientData)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SvCmdInfo *cmdPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    RegType *regPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *hashPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashSearch search;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Reclaim memory for shared arrays
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (buckets != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&bucketsMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (buckets != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            for (i = 0; i < NUMBUCKETS; ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Bucket *bucketPtr = &buckets[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                hashPtr = Tcl_FirstHashEntry(&bucketPtr->arrays, &search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                while (hashPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Array *arrayPtr = (Array*)Tcl_GetHashValue(hashPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    UnlockArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    DeleteArray(arrayPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    hashPtr = Tcl_NextHashEntry(&search);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (bucketPtr->lock) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Sp_RecursiveMutexFinalize(&bucketPtr->lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                SvFinalizeContainers(bucketPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DeleteHashTable(&bucketPtr->handles);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DeleteHashTable(&bucketPtr->arrays);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char *)buckets), buckets = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        buckets = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&bucketsMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexLock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Reclaim memory for registered commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (svCmdInfo != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        cmdPtr = svCmdInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (cmdPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            SvCmdInfo *tmpPtr = cmdPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)cmdPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            cmdPtr = tmpPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        svCmdInfo = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Reclaim memory for registered object types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (regType != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        regPtr = regType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (regPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            RegType *tmpPtr = regPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ckfree((char*)regPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            regPtr = tmpPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        regType = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_MutexUnlock(&svMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* SV_FINALIZE */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvCmd.h b/vendor/thread2.7.3/generic/threadSvCmd.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 85c66806d..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvCmd.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,225 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is the header file for the module that implements shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * for protected multithreaded access.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SV_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SV_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <tcl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <ctype.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSpCmd.h" /* For recursive locks */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Uncomment following line to get command-line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * compatibility with AOLserver nsv_* commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #define NSV_COMPAT 1 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Uncomment following line to force command-line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * compatibility with older thread::sv_ commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #define OLD_COMPAT 1 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef NSV_COMPAT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TSV_CMD2_PREFIX "nsv_"  /* Compatiblity prefix for NaviServer/AOLserver */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TSV_CMD2_PREFIX "sv_"   /* Regular command prefix for NaviServer/AOLserver */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef OLD_COMPAT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TSV_CMD_PREFIX "thread::sv_" /* Old command prefix for Tcl */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# define TSV_CMD_PREFIX "tsv::" /* Regular command prefix for Tcl */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Used when creating arrays/variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define FLAGS_CREATEARRAY  1   /* Create the array in bucket if none found */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define FLAGS_NOERRMSG     2   /* Do not format error message */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define FLAGS_CREATEVAR    4   /* Create the array variable if none found */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Macros for handling locking and unlocking
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define LOCK_BUCKET(a)      Sp_RecursiveMutexLock(&(a)->lock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define UNLOCK_BUCKET(a)    Sp_RecursiveMutexUnlock(&(a)->lock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define LOCK_CONTAINER(a)   Sp_RecursiveMutexLock(&(a)->bucketPtr->lock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define UNLOCK_CONTAINER(a) Sp_RecursiveMutexUnlock(&(a)->bucketPtr->lock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is named synetrically to LockArray as function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * rather than as a macro just to improve readability.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define UnlockArray(a) UNLOCK_CONTAINER(a)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Mode for Sv_PutContainer, so it knows what
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * happened with the embedded shared object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SV_UNCHANGED       0   /* Object has not been modified */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SV_CHANGED         1   /* Object has been modified */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define SV_ERROR          -1   /* Object may be in incosistent state */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Definitions of functions implementing simple key/value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * persistent storage for shared variable arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef ClientData (ps_open_proc)(const char*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_get_proc)   (ClientData, const char*, char**, size_t*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_put_proc)   (ClientData, const char*, char*, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_first_proc) (ClientData, char**, char**, size_t*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_next_proc)  (ClientData, char**, char**, size_t*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_delete_proc)(ClientData, const char*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef int (ps_close_proc) (ClientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef void(ps_free_proc)  (void*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef const char* (ps_geterr_proc)(ClientData);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This structure maintains a bunch of pointers to functions implementing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the simple persistence layer for the shared variable arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct PsStore {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *type;          /* Type identifier of the persistent storage */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData psHandle;       /* Handle to the opened storage */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_open_proc   *psOpen;    /* Function to open the persistent key store */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_get_proc    *psGet;     /* Function to retrieve value bound to key */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_put_proc    *psPut;     /* Function to store user key and value */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_first_proc  *psFirst;   /* Function to retrieve the first key/value */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_next_proc   *psNext;    /* Function to retrieve the next key/value */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_delete_proc *psDelete;  /* Function to delete user key and value */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_close_proc  *psClose;   /* Function to close the persistent store */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_free_proc   *psFree;    /* Fuction to free allocated memory */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ps_geterr_proc *psError;   /* Function to return last store error */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct PsStore *nextPtr;   /* For linking into linked lists */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} PsStore;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The following structure defines a collection of arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Only the arrays within a given bucket share a lock,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * allowing for more concurency.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Bucket {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Sp_RecursiveMutex lock;    /* */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashTable arrays;      /* Hash table of all arrays in bucket */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashTable handles;     /* Hash table of given-out handles in bucket */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct Container *freeCt;  /* List of free Tcl-object containers */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Bucket;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The following structure maintains the context for each variable array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Array {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *bindAddr;            /* Array is bound to this address */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PsStore *psPtr;            /* Persistent storage functions */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Bucket *bucketPtr;         /* Array bucket. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *entryPtr;   /* Entry in bucket array table. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *handlePtr;  /* Entry in handles table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashTable vars;        /* Table of variables. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Array;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The object container for Tcl-objects stored within shared arrays.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct Container {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Bucket *bucketPtr;         /* Bucket holding the array below */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Array *arrayPtr;           /* Array with the object container*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *entryPtr;   /* Entry in array table. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_HashEntry *handlePtr;  /* Entry in handles table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *tclObj;           /* Tcl object to hold shared values */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int epoch;                 /* Track object changes */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *chunkAddr;           /* Address of one chunk of object containers */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct Container *nextPtr; /* Next object container in the free list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int aolSpecial;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} Container;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure for generating command names in Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct SvCmdInfo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *name;                 /* The short name of the command */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *cmdName;              /* Real (rewritten) name of the command */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *cmdName2;             /* Real AOL (rewritten) name of the command */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ObjCmdProc *objProcPtr; /* The object-based command procedure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_CmdDeleteProc *delProcPtr; /* Pointer to command delete function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct SvCmdInfo *nextPtr;  /* Next in chain of registered commands */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int aolSpecial;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} SvCmdInfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Structure for registering special object duplicator functions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Reason for this is that even some regular Tcl duplicators
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * produce shallow instead of proper deep copies of the object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * While this is considered to be ok in single-threaded apps,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * a multithreaded app could have problems when accessing objects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * which live in (i.e. are accessed from) different interpreters.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * So, for each object type which should be stored in shared object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * pools, we must assure that the object is copied properly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct RegType {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const Tcl_ObjType *typePtr;       /* Type of the registered object */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DupInternalRepProc *dupIntRepProc; /* Special deep-copy duper */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct RegType *nextPtr;    /* Next in chain of registered types */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} RegType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Limited API functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterCommand(const char*,Tcl_ObjCmdProc*,Tcl_CmdDeleteProc*, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterObjType(const Tcl_ObjType*, Tcl_DupInternalRepProc*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterPsStore(const PsStore*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_GetContainer(Tcl_Interp*,int,Tcl_Obj*const objv[],Container**,int*,int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_PutContainer(Tcl_Interp*, Container*, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Private version of Tcl_DuplicateObj which takes care about
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copying objects when loaded to and retrieved from shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE Tcl_Obj* Sv_DuplicateObj(Tcl_Obj*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _SV_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvCmd.h,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvKeylistCmd.c b/vendor/thread2.7.3/generic/threadSvKeylistCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 67a84d19f..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvKeylistCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,360 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadSvKeylist.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This file implements keyed-list commands as part of the thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * shared variable implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Keyed list implementation is borrowed from Mark Diekhans and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Karl Lehenbauer "TclX" (extended Tcl) extension. Please look
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * into the keylist.c file for more information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvKeylistCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclXkeylist.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is defined in keylist.c. We need it here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to be able to plug-in our custom keyed-list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * object duplicator which produces proper deep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copies of the keyed-list objects. The standard
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * one produces shallow copies which are not good
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * for usage in the thread shared variables code.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extern Tcl_ObjType keyedListType;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Wrapped keyed-list commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvKeylsetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvKeylgetObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvKeyldelObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvKeylkeysObjCmd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This mutex protects a static variable which tracks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * registration of commands and object types.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex initMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterKeylistCommands --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Register shared variable commands for TclX keyed lists.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterKeylistCommands(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static int initialized;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("keylset",  SvKeylsetObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("keylget",  SvKeylgetObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("keyldel",  SvKeyldelObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("keylkeys", SvKeylkeysObjCmd, NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterObjType(&keyedListType, DupKeyedListInternalRepShared);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            initialized = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvKeylsetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::keylset" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvKeylsetObjCmd(arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;                     /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, off, ret, flg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *val;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          sv::keylset array lkey key value ?key value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $keylist keylset key value ?key value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 2 || ((objc - off) % 2)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "key value ?key value ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = off; i < objc; i += 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        val = Sv_DuplicateObj(objv[i+1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = TclX_KeyedListSet(interp, svObj->tclObj, key, val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvKeylgetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::keylget" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvKeylgetObjCmd(arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;                     /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, flg, off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *varObjPtr = NULL, *valObjPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          sv::keylget array lkey ?key? ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $keylist keylget ?key? ?var?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) > 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "?key? ?var?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Sv_PutContainer(interp, svObj, SV_UNCHANGED) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return SvKeylkeysObjCmd(arg, interp, objc, objv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        varObjPtr = objv[off+1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        varObjPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    key = Tcl_GetString(objv[off]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = TclX_KeyedListGet(interp, svObj->tclObj, key, &valObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_BREAK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (varObjPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult (interp, "key \"", key, "\" not found", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_Obj *resObjPtr = Sv_DuplicateObj(valObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (varObjPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_GetString(varObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (varObjPtr->length) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_ObjSetVar2(interp, varObjPtr, NULL, resObjPtr, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp, resObjPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvKeyldelObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::keyldel" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvKeyldelObjCmd(arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;                     /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, off, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          sv::keyldel array lkey key ?key ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $keylist keyldel ?key ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "key ?key ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = off; i < objc; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = TclX_KeyedListDelete(interp, svObj->tclObj, key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret == TCL_BREAK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendResult(interp, "key \"", key, "\" not found", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret == TCL_BREAK || ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvKeylkeysObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::keylkeys" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvKeylkeysObjCmd(arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;                     /* Not used. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;                 /* Current interpreter. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;                           /* Number of arguments. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];              /* Argument objects. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *key = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *listObj = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          sv::keylkeys array lkey ?key?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $keylist keylkeys ?key?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         Tcl_WrongNumArgs(interp, 1, objv, "?lkey?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        key = Tcl_GetString(objv[off]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = TclX_KeyedListGetKeys(interp, svObj->tclObj, key, &listObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (key && ret == TCL_BREAK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "key \"", key, "\" not found", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_BREAK || ret == TCL_ERROR) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult (interp, listObj); /* listObj allocated by API !*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvKeylistCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvKeylistCmd.h b/vendor/thread2.7.3/generic/threadSvKeylistCmd.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 1f2355427..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvKeylistCmd.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,27 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadSvKeylistCmd.h --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _KEYLISTCMDS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _KEYLISTCMDS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "tclThreadInt.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void Sv_RegisterKeylistCommands(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void TclX_KeyedListInit(Tcl_Interp *interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _KEYLISTCMDS_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvKeylistCmd.h,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvListCmd.c b/vendor/thread2.7.3/generic/threadSvListCmd.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index e23ee2860..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvListCmd.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1171 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Implementation of most standard Tcl list processing commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * suitable for operation on thread shared (list) variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "threadSvListCmd.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Implementation of list commands for shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Most of the standard Tcl list commands are implemented.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * There are also two new commands: "lpop" and "lpush".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Those are very convenient for simple stack operations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Main difference to standard Tcl commands is that our commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * operate on list variable per-reference instead per-value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This way we avoid frequent object shuffling between shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * containers and current interpreter, thus increasing speed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLpopObjCmd;      /* lpop        */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLpushObjCmd;     /* lpush       */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLappendObjCmd;   /* lappend     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLreplaceObjCmd;  /* lreplace    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLlengthObjCmd;   /* llength     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLindexObjCmd;    /* lindex      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLinsertObjCmd;   /* linsert     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLrangeObjCmd;    /* lrange      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLsearchObjCmd;   /* lsearch     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_ObjCmdProc SvLsetObjCmd;      /* lset        */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * These two are copied verbatim from the tclUtil.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * since not found in the public stubs table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * I was just too lazy to rewrite them from scratch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int SvCheckBadOctal(Tcl_Interp*, const char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int SvGetIntForIndex(Tcl_Interp*,  Tcl_Obj *, int, int*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Inefficient list duplicator function which,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * however, produces deep list copies, unlike
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the original, which just makes shallow copies.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void DupListObjShared(Tcl_Obj*, Tcl_Obj*);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This mutex protects a static variable which tracks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * registration of commands and object types.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Mutex initMutex;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Functions for implementing the "lset" list command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Obj*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLsetFlat(Tcl_Interp *interp, Tcl_Obj *listPtr, int indexCount,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           Tcl_Obj **indexArray, Tcl_Obj *valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Sv_RegisterListCommands --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Register list commands with shared variable module.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Memory gets allocated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Sv_RegisterListCommands(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static int initialized = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexLock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (initialized == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* Create list with 1 empty element. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj *listobj = Tcl_NewObj();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            listobj = Tcl_NewListObj(1, &listobj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterObjType(listobj->typePtr, DupListObjShared);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(listobj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lpop",     SvLpopObjCmd,     NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lpush",    SvLpushObjCmd,    NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lappend",  SvLappendObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lreplace", SvLreplaceObjCmd, NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("linsert",  SvLinsertObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("llength",  SvLlengthObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lindex",   SvLindexObjCmd,   NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lrange",   SvLrangeObjCmd,   NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lsearch",  SvLsearchObjCmd,  NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Sv_RegisterCommand("lset",     SvLsetObjCmd,     NULL, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            initialized = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_MutexUnlock(&initMutex);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLpopObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lpop" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLpopObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, llen, index = 0, iarg = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *elPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lpop array key ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lpop ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) > 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "?index?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        iarg = off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjLength(interp, svObj->tclObj, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (iarg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = SvGetIntForIndex(interp, objv[iarg], llen-1, &index);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (index < 0 || index >= llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_ok; /* Ignore out-of bounds, like Tcl does */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjIndex(interp, svObj->tclObj, index, &elPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_IncrRefCount(elPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjReplace(interp, svObj->tclObj, index, 1, 0, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(elPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, elPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_DecrRefCount(elPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_ok:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLpushObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lpush" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLpushObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int off, ret, flg, llen, index = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *args[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lpush array key element ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lpush element ?index?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "element ?index?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjLength(interp, svObj->tclObj, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = SvGetIntForIndex(interp, objv[off+1], llen, &index);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (index < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            index = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (index > llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            index = llen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    args[0] = Sv_DuplicateObj(objv[off]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjReplace(interp, svObj->tclObj, index, 0, 1, args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_DecrRefCount(args[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLappendObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lappend" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLappendObjCmd(arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, ret, flg, off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *dup;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lappend array key value ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lappend value ?value ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "value ?value ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = off; i < objc; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dup = Sv_DuplicateObj(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Tcl_ListObjAppendElement(interp, svObj->tclObj, dup);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(dup);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Sv_DuplicateObj(svObj->tclObj));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLreplaceObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lreplace" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLreplaceObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *firstArg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t argLen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, llen, first, last, ndel, nargs, i, j;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **args = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lreplace array key first last ?element ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lreplace first last ?element ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "first last ?element ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjLength(interp, svObj->tclObj, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off], llen-1, &first);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off+1], llen-1, &last);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    firstArg = Tcl_GetString(objv[off]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    argLen = objv[off]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (first < 0)  {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        first = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (llen && first >= llen && strncmp(firstArg, "end", argLen)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_AppendResult(interp, "list doesn't have element ", firstArg, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (last >= llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        last = llen - 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (first <= last) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ndel = last - first + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ndel = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nargs = objc - (off + 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (nargs) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        args = (Tcl_Obj**)ckalloc(nargs * sizeof(Tcl_Obj*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for(i = off + 2, j = 0; i < objc; i++, j++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            args[j] = Sv_DuplicateObj(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjReplace(interp, svObj->tclObj, first, ndel, nargs, args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (args) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            for(i = off + 2, j = 0; i < objc; i++, j++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_DecrRefCount(args[j]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLrangeObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lrange" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLrangeObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, llen, first, last, nargs, i, j;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **elPtrs, **args;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lrange array key first last
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lrange first last
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) != 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "first last");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjGetElements(interp, svObj->tclObj, &llen, &elPtrs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off], llen-1, &first);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off+1], llen-1, &last);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (first < 0)  {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        first = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (last >= llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        last = llen - 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (first > last) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nargs = last - first + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    args  = (Tcl_Obj**)ckalloc(nargs * sizeof(Tcl_Obj*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = first, j = 0; i <= last; i++, j++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        args[j] = Sv_DuplicateObj(elPtrs[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetListObj(Tcl_GetObjResult(interp), nargs, args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_ok:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLinsertObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::linsert" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLinsertObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int off, ret, flg, llen, nargs, index = 0, i, j;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **args;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::linsert array key index element ?element ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list linsert element ?element ...?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flg = FLAGS_CREATEARRAY | FLAGS_CREATEVAR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, flg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "index element ?element ...?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjLength(interp, svObj->tclObj, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off], llen, &index);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (index < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        index = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (index > llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        index = llen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nargs = objc - (off + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    args  = (Tcl_Obj**)ckalloc(nargs * sizeof(Tcl_Obj*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = off + 1, j = 0; i < objc; i++, j++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         args[j] = Sv_DuplicateObj(objv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjReplace(interp, svObj->tclObj, index, 0, nargs, args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for (i = off + 1, j = 0; i < objc; i++, j++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(args[j]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ckfree((char*)args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLlengthObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::llength" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLlengthObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int llen, off, ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::llength array key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list llength
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjLength(interp, svObj->tclObj, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Tcl_NewIntObj(llen));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (Sv_PutContainer(interp, svObj, SV_UNCHANGED) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLsearchObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lsearch" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLsearchObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, listc, mode, imode, ipatt, index, match, i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *patBytes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **listv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static const char *modes[] = {"-exact", "-glob", "-regexp", NULL};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    enum {LS_EXACT, LS_GLOB, LS_REGEXP};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    mode = LS_GLOB;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lsearch array key ?mode? pattern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lsearch ?mode? pattern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        imode = off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ipatt = off + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if ((objc - off) == 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        imode = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ipatt = off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "?mode? pattern");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (imode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ret = Tcl_GetIndexFromObjStruct(interp, objv[imode], modes, sizeof(char *), "search mode",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                0, &mode);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjGetElements(interp, svObj->tclObj, &listc, &listv);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    index = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    patBytes = Tcl_GetString(objv[ipatt]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    length = objv[ipatt]->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; i < listc; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        match = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch (mode) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        case LS_GLOB:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            match = Tcl_StringMatch(Tcl_GetString(listv[i]), patBytes);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        case LS_EXACT: {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            const char *bytes = Tcl_GetString(listv[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (length == (size_t)listv[i]->length) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                match = (memcmp(bytes, patBytes, length) == 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        case LS_REGEXP:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            match = Tcl_RegExpMatchObj(interp, listv[i], objv[ipatt]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (match < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (match) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            index = i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Tcl_NewIntObj(index));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLindexObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lindex" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLindexObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **elPtrs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, off, llen, index;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lindex array key index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lindex index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) != 1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "index");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Tcl_ListObjGetElements(interp, svObj->tclObj, &llen, &elPtrs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = SvGetIntForIndex(interp, objv[off], llen-1, &index);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (index >= 0 && index < llen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_SetObjResult(interp, Sv_DuplicateObj(elPtrs[index]));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_UNCHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLsetObjCmd --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This procedure is invoked to process the "tsv::lset" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation for details on what it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      A standard Tcl result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      See the user documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLsetObjCmd (arg, interp, objc, objv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ClientData arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int objc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *const objv[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *lPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int ret, argc, off;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Container *svObj = (Container*)arg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          tsv::lset array key index ?index ...? value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *          $list lset index ?index ...? value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ret = Sv_GetContainer(interp, objc, objv, &svObj, &off, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ret != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((objc - off) < 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, off, objv, "index ?index...? value");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        goto cmd_err;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lPtr = svObj->tclObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    argc = objc - off - 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!SvLsetFlat(interp, lPtr, argc, (Tcl_Obj**)objv+off,objv[objc-1])) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetObjResult(interp, Sv_DuplicateObj(lPtr));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_CHANGED);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd_err:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return Sv_PutContainer(interp, svObj, SV_ERROR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * DupListObjShared --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      Help function to make a proper deep copy of the list object.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This is used as the replacement-hook for list object native
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      DupInternalRep function. We need it since the native function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      does a shallow list copy, i.e. retains references to list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      element objects from the original list. This gives us trouble
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      when making the list object shared between threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Side effects;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      This is not a very efficient implementation, but that's all what's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      available to Tcl API programmer. We could include the tclInt.h and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *      get the copy more efficient using list internals, but ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DupListObjShared(srcPtr, copyPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *srcPtr;            /* Object with internal rep to copy. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *copyPtr;           /* Object with internal rep to set. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, llen;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *elObj, **newObjList;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_ListObjLength(NULL, srcPtr, &llen);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (llen == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        (*srcPtr->typePtr->dupIntRepProc)(srcPtr, copyPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        copyPtr->refCount = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    newObjList = (Tcl_Obj**)ckalloc(llen*sizeof(Tcl_Obj*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; i < llen; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ListObjIndex(NULL, srcPtr, i, &elObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        newObjList[i] = Sv_DuplicateObj(elObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_SetListObj(copyPtr, llen, newObjList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ckfree((char*)newObjList);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvCheckBadOctal --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Exact copy from the TclCheckBadOctal found in tclUtil.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  since this is not in the stubs table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvCheckBadOctal(interp, value)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;     /* Interpreter to use for error reporting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * If NULL, then no error message is left
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * after errors. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *value;      /* String to check. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    register const char *p = value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * A frequent mistake is invalid octal values due to an unwanted
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * leading zero. Try to generate a meaningful error message.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (isspace((unsigned char)(*p))) { /* INTL: ISO space. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        p++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*p == '+' || *p == '-') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        p++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (*p == '0') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (isdigit((unsigned char)(*p))) { /* INTL: digit. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            p++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (isspace((unsigned char)(*p))) { /* INTL: ISO space. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            p++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (*p == '\0') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* Reached end of string */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (interp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_AppendResult(interp, " (looks like invalid octal number)",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        (char *) NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvGetIntForIndex --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Exact copy from the TclGetIntForIndex found in tclUtil.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  since this is not in the stubs table.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *-----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvGetIntForIndex(interp, objPtr, endValue, indexPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Interp *interp;     /* Interpreter to use for error reporting.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * If NULL, then no error message is left
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * after errors. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj *objPtr;        /* Points to an object containing either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * "end" or an integer. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int endValue;           /* The value to be stored at "indexPtr" if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * "objPtr" holds "end". */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int *indexPtr;          /* Location filled in with an integer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             * representing an index. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *bytes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    bytes = Tcl_GetString(objPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    length = objPtr->length;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if ((*bytes != 'e')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        || (strncmp(bytes, "end",((length > 3) ? 3 : length)) != 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_GetIntFromObj(NULL, objPtr, &offset) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            goto intforindex_error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *indexPtr = offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (length <= 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *indexPtr = endValue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (bytes[3] == '-') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * This is our limited string expression evaluator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (Tcl_GetInt(interp, bytes+3, &offset) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        *indexPtr = endValue + offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  intforindex_error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (interp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_ResetResult(interp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "bad index \"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    bytes, "\": must be integer or end?-integer?",(char*)NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            SvCheckBadOctal(interp, bytes);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SvLsetFlat --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Almost exact copy from the TclLsetFlat found in tclListObj.c.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Simplified in a sense that thread shared objects are guaranteed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  to be non-shared.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  Actual return value of this procedure is irrelevant to the caller,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *  and it should be either NULL or non-NULL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *----------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static Tcl_Obj*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SvLsetFlat(interp, listPtr, indexCount, indexArray, valuePtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Interp *interp;     /* Tcl interpreter */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Obj *listPtr;       /* Pointer to the list being modified */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     int indexCount;         /* Number of index args */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Obj **indexArray;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     Tcl_Obj *valuePtr;      /* Value arg to 'lset' */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int elemCount, index, result, i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Tcl_Obj **elemPtrs, *chainPtr, *subListPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Determine whether the index arg designates a list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * or a single index.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (indexCount == 1 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_ListObjGetElements(interp, indexArray[0], &indexCount,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               &indexArray) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Index arg designates something that is neither an index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * nor a well formed list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * If there are no indices, then simply return the new value,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * counting the returned pointer as a reference
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (indexCount == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Anchor the linked list of Tcl_Obj's whose string reps must be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * invalidated if the operation succeeds.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    chainPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Handle each index arg by diving into the appropriate sublist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (i = 0; ; ++i) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Take the sublist apart.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = Tcl_ListObjGetElements(interp,listPtr,&elemCount,&elemPtrs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (result != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listPtr->internalRep.twoPtrValue.ptr2 = (void*)chainPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Determine the index of the requested element.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = SvGetIntForIndex(interp, indexArray[i], elemCount-1, &index);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (result != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Check that the index is in range.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (index < 0 || index >= elemCount) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_SetObjResult(interp,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             Tcl_NewStringObj("list index out of range", -1));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            result = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Break the loop after extracting the innermost sublist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (i >= (indexCount - 1)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            result = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * Extract the appropriate sublist and chain it onto the linked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         * list of Tcl_Obj's whose string reps must be spoilt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        subListPtr = elemPtrs[index];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        chainPtr = listPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listPtr = subListPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* Store the result in the list element */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (result == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        result = Tcl_ListObjGetElements(interp,listPtr,&elemCount,&elemPtrs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (result == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_DecrRefCount(elemPtrs[index]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            elemPtrs[index] = Sv_DuplicateObj(valuePtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_IncrRefCount(elemPtrs[index]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (result == TCL_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        listPtr->internalRep.twoPtrValue.ptr2 = (void*)chainPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* Spoil all the string reps */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while (listPtr != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            subListPtr = (Tcl_Obj*)listPtr->internalRep.twoPtrValue.ptr2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_InvalidateStringRep(listPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            listPtr->internalRep.twoPtrValue.ptr2 = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            listPtr = subListPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return valuePtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvListCmd.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/generic/threadSvListCmd.h b/vendor/thread2.7.3/generic/threadSvListCmd.h
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 764781046..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/generic/threadSvListCmd.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,24 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.txt" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ---------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _SV_LIST_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _SV_LIST_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODULE_SCOPE void Sv_RegisterListCommands();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif /* _SV_LIST_H_ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadSvListCmd.h,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/lib/ttrace.tcl b/vendor/thread2.7.3/lib/ttrace.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4eb6b77ed..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/lib/ttrace.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,942 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ttrace.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (C) 2003 Zoran Vasiljevic, Archiware GmbH. All Rights Reserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User level commands:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::eval           top-level wrapper (ttrace-savvy eval)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::enable         activates registered Tcl command traces
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::disable        terminates tracing of Tcl commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::isenabled      returns true if ttrace is enabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::cleanup        bring the interp to a pristine state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::update         update interp to the latest trace epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::config         setup some configuration options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::getscript      returns a script for initializing interps
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Commands used for/from trace callbacks:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::atenable       register callback to be done at trace enable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::atdisable      register callback to be done at trace disable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::addtrace       register user-defined tracer callback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::addscript      register user-defined script generator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::addresolver    register user-defined command resolver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::addcleanup     register user-defined cleanup procedures
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::addentry       adds one entry into the named trace store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::getentry       returns the entry value from the named store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::delentry       removes the entry from the named store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::getentries     returns all entries from the named store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ttrace::preload        register procedures to be preloaded always
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Limitations:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   o. [namespace forget] is still not implemented
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   o. [namespace origin cmd] breaks if cmd is not already defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      I left this deliberately. I didn't want to override the [namespace]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      command in order to avoid potential slowdown.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval ttrace {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Setup some compatibility wrappers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info commands nsv_set] != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable tvers 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable mutex ns_mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable elock [$mutex create traceepochmutex]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Import the underlying API; faster than recomputing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_array   {} nsv_array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_incr    {} nsv_incr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_lappend {} nsv_lappend
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_names   {} nsv_names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_set     {} nsv_set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_unset   {} nsv_unset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {![catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable tvers [package require Thread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable mutex thread::mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable elock [$mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Import the underlying API; faster than recomputing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_array   {} tsv::array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_incr    {} tsv::incr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_lappend {} tsv::lappend
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_names   {} tsv::names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_set     {} tsv::set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp alias {} [namespace current]::_unset   {} tsv::unset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        error "requires NaviServer/AOLserver or Tcl threading extension"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Keep in sync with the Thread package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    package provide Ttrace 2.7.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Package variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable resolvers ""     ; # List of registered resolvers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable tracers   ""     ; # List of registered cmd tracers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable scripts   ""     ; # List of registered script makers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable enables   ""     ; # List of trace-enable callbacks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable disables  ""     ; # List of trace-disable callbacks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable preloads  ""     ; # List of procedure names to preload
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable enabled   0      ; # True if trace is enabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable config           ; # Array with config options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable epoch     -1     ; # The initialization epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable cleancnt   0     ; # Counter of registered cleaners
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Package private namespaces
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace eval resolve "" ; # Commands for resolving commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace eval trace   "" ; # Commands registered for tracing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace eval enable  "" ; # Commands invoked at trace enable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace eval disable "" ; # Commands invoked at trace disable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace eval script  "" ; # Commands for generating scripts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Exported commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    namespace export unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Initialize ttrace shared state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[_array exists ttrace] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _set ttrace lastepoch $epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _set ttrace epochlist ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Initially, allow creation of epochs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set config(-doepochs) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc eval {cmd args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        enable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set code [catch {uplevel 1 [concat $cmd $args]} result]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        disable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[llength [info commands ns_ictl]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ns_ictl save [getscript]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                thread::broadcast {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    package require Ttrace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ttrace::update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -code $code \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -errorinfo $::errorInfo -errorcode $::errorCode $result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc config {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable config
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[llength $args] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            array get config
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } elseif {[llength $args] == 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set opt [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set config($opt)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set opt [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set val [lindex $args 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set config($opt) $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc enable {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable config
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable tracers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable enables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable enabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        incr enabled 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$enabled > 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$config(-doepochs) != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            variable epoch [_newepoch]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set nsp [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach enabler $enables {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            enable::_$enabler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach trace $tracers {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info commands $trace] != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                trace add execution $trace leave ${nsp}::trace::_$trace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc disable {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable enabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable tracers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable disables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        incr enabled -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$enabled > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set nsp [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach disabler $disables {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            disable::_$disabler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach trace $tracers {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info commands $trace] != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                trace remove execution $trace leave ${nsp}::trace::_$trace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc isenabled {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable enabled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        expr {$enabled > 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc update {{from -1}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$from == -1} { 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            variable epoch [_set ttrace lastepoch]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[lsearch [_set ttrace epochlist] $from] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                error "no such epoch: $from"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            variable epoch $from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        uplevel [getscript]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc getscript {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable preloads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable scripts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append script [_serializensp] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append script "::namespace eval [namespace current] {" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append script "::namespace export unknown" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append script "_useepoch $epoch" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append script "}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach cmd $preloads {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append script [_serializeproc $cmd] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach maker $scripts {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append script [script::_$maker]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc cleanup {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach cmd [info commands resolve::cleaner_*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            uplevel $cmd $args
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc preload {cmd} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable preloads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $preloads $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend preloads $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc atenable {cmd arglist body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable enables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $enables $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend enables $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd [namespace current]::enable::_$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc $cmd $arglist $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc atdisable {cmd arglist body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable disables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $disables $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend disables $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd [namespace current]::disable::_$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc $cmd $arglist $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc addtrace {cmd arglist body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable tracers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $tracers $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend tracers $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set tracer [namespace current]::trace::_$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc $tracer $arglist $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[isenabled]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                trace add execution $cmd leave $tracer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $tracer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc addscript {cmd body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable scripts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $scripts $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend scripts $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd [namespace current]::script::_$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc $cmd args $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc addresolver {cmd arglist body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable resolvers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lsearch $resolvers $cmd] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend resolvers $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd [namespace current]::resolve::$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc $cmd $arglist $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc addcleanup {body} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable cleancnt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cmd [namespace current]::resolve::cleaner_[incr cleancnt]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        proc $cmd args $body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc addentry {cmd var val} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _set ${epoch}-$cmd $var $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc delentry {cmd var} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ei $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ec $::errorCode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        catch {_unset ${epoch}-$cmd $var}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::errorInfo $ei
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::errorCode $ec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc getentry {cmd var} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ei $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ec $::errorCode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {_set ${epoch}-$cmd $var} val]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::errorInfo $ei
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::errorCode $ec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set val ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc getentries {cmd {pattern *}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _array names ${epoch}-$cmd $pattern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc unknown {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cmd [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[uplevel ttrace::_resolve [list $cmd]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set c [catch {uplevel $cmd [lrange $args 1 end]} r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set c [catch {::eval ::tcl::unknown $args} r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return -code $c -errorcode $::errorCode -errorinfo $::errorInfo $r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _resolve {cmd} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable resolvers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach resolver $resolvers {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[uplevel [info comm resolve::$resolver] [list $cmd]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _getthread {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info commands ns_thread] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            thread::id
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ns_thread getid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _getthreads {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info commands ns_thread] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [thread::names]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach entry [ns_info threads] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend threads [lindex $entry 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return $threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _newepoch {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable elock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable mutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $mutex lock $elock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set old [_set ttrace lastepoch]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set new [_incr ttrace lastepoch]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _lappend ttrace $new [_getthread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$old >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            _copyepoch $old $new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            _delepochs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _lappend ttrace epochlist $new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $mutex unlock $elock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _copyepoch {old new} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach var [_names $old-*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd [lindex [split $var -] 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            _array reset $new-$cmd [_array get $var]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _delepochs {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tlist [_getthreads]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set elist ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach epoch [_set ttrace epochlist] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[_dropepoch $epoch $tlist] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend elist $epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                _unset ttrace $epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        _set ttrace epochlist $elist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _dropepoch {epoch threads} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set self [_getthread] 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach tid [_set ttrace $epoch] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$tid != $self && [lsearch $threads $tid] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend alive $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists alive]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            _set ttrace $epoch $alive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach var [_names $epoch-*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                _unset $var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _useepoch {epoch} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$epoch >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set tid [_getthread]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[lsearch [_set ttrace $epoch] $tid] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                _lappend ttrace $epoch $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _serializeproc {cmd} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set dargs [info args $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pbody [info body $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pargs ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach arg $dargs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info default $cmd $arg def]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend pargs $arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend pargs [list $arg $def]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set nsp [namespace qual $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$nsp == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set nsp "::"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res [list ::namespace eval $nsp] " {" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res [list ::proc [namespace tail $cmd] $pargs $pbody] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res "}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _serializensp {{nsp ""} {result _}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        upvar $result res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$nsp == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set nsp [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res [list ::namespace eval $nsp] " {" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach var [info vars ${nsp}::*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set vname [namespace tail $var]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[array exists $var] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res [list ::variable $vname [set $var]] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res [list ::variable $vname] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res [list ::array set $vname [array get $var]] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach cmd [info procs ${nsp}::*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res [_serializeproc $cmd] \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res "}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach nn [namespace children $nsp] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            _serializensp $nn res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The code below is ment to be run once during the application start.  It
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# provides implementation of tracing callbacks for some Tcl commands.  Users
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# can supply their own tracer implementations on-the-fly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The code below will create traces for the following Tcl commands:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    "namespace", "variable", "load", "proc" and "rename"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Also, the Tcl object extension XOTcl 1.1.0 is handled and all XOTcl related
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# things, like classes and objects are traced (many thanks to Gustaf Neumann
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# from XOTcl for his kind help and support).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-eval {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the "load" trace. This will create the following key/value pair
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in the "load" store:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----              --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  <path_of_loaded_image>    <name_of_the_init_proc>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # We normally need only the name_of_the_init_proc for being able to load
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the package in other interpreters, but we store the path to the image
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # file as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addtrace load {cmdline code args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set image [lindex $cmdline 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set initp [lindex $cmdline 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$initp == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach pkg [info loaded] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[lindex $pkg 0] == $image} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set initp [lindex $pkg 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ttrace::addentry load $image $initp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript load {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res "\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach entry [ttrace::getentries load] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set initp [ttrace::getentry load $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "::load {} $initp" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the "namespace" trace. This will create the following key/value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # entry in "namespace" store:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----                   --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::namespace  1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # It will also fill the "proc" store for procedures and commands imported
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in this namespace with following:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----                   --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::proc       [list <ns>  "" ""]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The <ns> is the name of the namespace where the command or procedure is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # imported from.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addtrace namespace {cmdline code args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set nop [lindex $cmdline 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -glob $nop {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            eva* {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set nsp [lindex $cmdline 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {![string match "::*" $nsp]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set nsp ${cns}::$nsp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ttrace::addentry namespace $nsp 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            imp* {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # - parse import arguments (skip opt "-force")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set opts [lrange $cmdline 2 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[string match "-fo*" [lindex $opts 0]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set opts [lrange $cmdline 3 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # - register all imported procs and commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach opt $opts {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {![string match "::*" [::namespace qual $opt]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set opt ${cns}::$opt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # - first import procs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    foreach entry [ttrace::getentries proc $opt] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set cmd ${cns}::[::namespace tail $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set nsp [::namespace qual $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set done($cmd) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set entry [list 0 $nsp "" ""]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ttrace::addentry proc $cmd $entry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # - then import commands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    foreach entry [info commands $opt] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set cmd ${cns}::[::namespace tail $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set nsp [::namespace qual $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        if {[info exists done($cmd)] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set entry [list 0 $nsp "" ""]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            ttrace::addentry proc $cmd $entry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript namespace {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach entry [ttrace::getentries namespace] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "::namespace eval $entry {}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the "variable" trace. This will create the following key/value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # entry in the "variable" store:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----                   --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::variable   1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The variable value itself is ignored at the time of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # trace/collection. Instead, we take the real value at the time of script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # generation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addtrace variable {cmdline code args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set opts [lrange $cmdline 1 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[llength $opts]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach {var val} $opts {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {![string match "::*" $var]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set var ${cns}::$var
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ttrace::addentry variable $var 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript variable {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach entry [ttrace::getentries variable] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns [namespace qual $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set var [namespace tail $entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "::namespace eval $cns {" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "::variable $var"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[array exists $entry]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res "\n::array set $var [list [array get $entry]]" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } elseif {[info exists $entry]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res " [list [set $entry]]" \n 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append res \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the "rename" trace. It will create the following key/value pair
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in "rename" store:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----              --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::old  ::fully::qualified::new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The "new" value may be empty, for commands that have been deleted. In
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # such cases we also remove any traced procedure definitions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addtrace rename {cmdline code args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set old [lindex $cmdline 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![string match "::*" $old]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set old ${cns}::$old
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set new [lindex $cmdline 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$new != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![string match "::*" $new]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set new ${cns}::$new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ttrace::addentry rename $old $new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ttrace::delentry proc $old
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript rename {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append res \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach old [ttrace::getentries rename] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set new [ttrace::getentry rename $old]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append res "::rename $old {$new}" \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the "proc" trace. This will create the following key/value pair
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in the "proc" store:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----              --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::proc  [list <epoch> <ns> <arglist> <body>]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The <epoch> chages anytime one (re)defines a proc.  The <ns> is the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # namespace where the command was imported from. If empty, the <arglist>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # and <body> will hold the actual procedure definition. See the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # "namespace" tracer implementation also.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addtrace proc {cmdline code args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$code != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cmd [lindex $cmdline 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![string match "::*" $cmd]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd ${cns}::$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set dargs [info args $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pbody [info body $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pargs ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach arg $dargs {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info default $cmd $arg def]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend pargs $arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend pargs [list $arg $def]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pdef [ttrace::getentry proc $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$pdef == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set epoch -1 ; # never traced before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set epoch [lindex $pdef 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ttrace::addentry proc $cmd [list [incr epoch] "" $pargs $pbody]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript proc {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info command ::tcl::unknown] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                rename ::unknown ::tcl::unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                namespace import -force ::ttrace::unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info command ::tcl::info] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                rename ::info ::tcl::info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            proc ::info args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set cmd [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set hit [lsearch -glob {commands procs args default body} $cmd*]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$hit > 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[catch {uplevel ::tcl::info $args}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        uplevel ttrace::_resolve [list [lindex $args 1]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return [uplevel ::tcl::info $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$hit == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return [uplevel ::tcl::info $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set pat [lindex $args 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {![string match "::*" $pat]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set pat ${cns}::$pat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set fns [ttrace::getentries proc $pat]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[string match $cmd* commands]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set fns [concat $fns [ttrace::getentries xotcl $pat]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach entry $fns {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {$cns != [namespace qual $entry]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set lazy($entry) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set lazy([namespace tail $entry]) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach entry [uplevel ::tcl::info $args] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set lazy($entry) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                array names lazy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register procedure resolver. This will try to resolve the command in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # current namespace first, and if not found, in global namespace.  It also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # handles commands imported from other namespaces.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addresolver resolveprocs {cmd {export 0}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set name [namespace tail $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cns ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![string match "::*" $cmd]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ncmd ${cns}::$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set gcmd ::$cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ncmd $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set gcmd $cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pdef [ttrace::getentry proc $ncmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$pdef == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set pdef [ttrace::getentry proc $gcmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$pdef == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd $gcmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd $ncmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set epoch [lindex $pdef 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pnsp  [lindex $pdef 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$pnsp != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set nsp [namespace qual $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$nsp == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set nsp ::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set cmd ${pnsp}::$name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[resolveprocs $cmd 1] == 0 && [info commands $cmd] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            namespace eval $nsp "namespace import -force $cmd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            uplevel 0 [list ::proc $cmd [lindex $pdef 2] [lindex $pdef 3]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$export} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set nsp [namespace qual $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$nsp == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set nsp ::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                namespace eval $nsp "namespace export $name"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable resolveproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set resolveproc($cmd) $epoch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # For XOTcl, the entire item introspection/tracing is delegated to XOTcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # itself. The xotcl store is filled with this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  --- key ----               --- value ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #  ::fully::qualified::item   <body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The <body> is the script used to generate the entire item (class,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # object). Note that we do not fill in this during code tracing. It is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # done during the script generation. In this step, only the placeholder is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # set.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # NOTE: we assume all XOTcl commands are imported in global namespace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::atenable XOTclEnabler {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info commands ::xotcl::Class] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info commands ::xotcl::_creator] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ::xotcl::Class create ::xotcl::_creator -instproc create {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set result [next]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {![string match ::xotcl::_* $result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ttrace::addentry xotcl $result ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return $result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ::xotcl::Class instmixin ::xotcl::_creator
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::atdisable XOTclDisabler {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {   [info commands ::xotcl::Class] == "" 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            || [info commands ::xotcl::_creator] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ::xotcl::Class instmixin ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ::xotcl::_creator destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set resolver [ttrace::addresolver resolveclasses {classname} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cns [uplevel namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set script [ttrace::getentry xotcl $classname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$script == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set name [namespace tail $classname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$cns == "::"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set script [ttrace::getentry xotcl ::$name]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set script [ttrace::getentry xotcl ${cns}::$name]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$script == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set script [ttrace::getentry xotcl ::$name]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$script == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        uplevel [list namespace eval $cns $script]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addscript xotcl [subst -nocommands {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![catch {Serializer new} ss]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach entry [ttrace::getentries xotcl] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[ttrace::getentry xotcl \$entry] == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ttrace::addentry xotcl \$entry [\$ss serialize \$entry]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            \$ss destroy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return {::xotcl::Class proc __unknown name {$resolver \$name}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register callback to be called on cleanup. This will trash lazily loaded
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # procs which have changed since.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ttrace::addcleanup {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        variable resolveproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach cmd [array names resolveproc] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set def [ttrace::getentry proc $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$def != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set new [lindex $def 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set old $resolveproc($cmd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info command $cmd] != "" && $new != $old} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    catch {rename $cmd ""}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# fill-column: 78
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tab-width: 8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# indent-tabs-mode: nil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/license.terms b/vendor/thread2.7.3/license.terms
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 9df3e6003..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/license.terms
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,39 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This software is copyrighted by the Regents of the University of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-California, Sun Microsystems, Inc., Scriptics Corporation,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and other parties.  The following terms apply to all files associated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with the software unless explicitly disclaimed in individual files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The authors hereby grant permission to use, copy, modify, distribute,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and license this software and its documentation for any purpose, provided
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that existing copyright notices are retained in all copies and that this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-notice is included verbatim in any distributions. No written agreement,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-license, or royalty fee is required for any of the authorized uses.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Modifications to this software may be copyrighted by their authors
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and need not follow the licensing terms described here, provided that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the new terms are clearly indicated on the first page of each file where
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-they apply.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MODIFICATIONS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GOVERNMENT USE: If you are acquiring this software on behalf of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-U.S. government, the Government shall have only "Restricted Rights"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-in the software and related documentation as defined in the Federal 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-are acquiring the software on behalf of the Department of Defense, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-software shall be classified as "Commercial Computer Software" and the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Government shall have only "Restricted Rights" as defined in Clause
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-authors grant the U.S. Government and others acting in its behalf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-permission to use and distribute the software in accordance with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-terms specified in this license. 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/naviserver.m4 b/vendor/thread2.7.3/naviserver.m4
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index f0ab1fca5..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/naviserver.m4
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,57 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# NS_PATH_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Allows the building with support for NaviServer/AOLserver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       --with-naviserver=...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       NS_DIR Full path to the directory containing NaviServer/AOLserver distro
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       NS_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       NS_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Sets the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       NS_AOLSERVER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Updates following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN(NS_PATH_AOLSERVER, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for NaviServer/AOLserver configuration])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_WITH(naviserver,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [  --with-naviserver       directory with NaviServer/AOLserver distribution],\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    with_naviserver=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL(ac_cv_c_naviserver,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${with_naviserver}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test -f "${with_naviserver}/include/ns.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ac_cv_c_naviserver=`(cd ${with_naviserver}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            AC_MSG_ERROR([${with_naviserver} directory doesn't contain ns.h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${ac_cv_c_naviserver}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([none found])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        NS_DIR=${ac_cv_c_naviserver}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([found NaviServer/AOLserver in $NS_DIR])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        NS_INCLUDES="-I\"${NS_DIR}/include\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "`uname -s`" = Darwin ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            aollibs=`ls ${NS_DIR}/lib/libns* 2>/dev/null`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test x"$aollibs" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                NS_LIBS="-L\"${NS_DIR}/lib\" -lnsd -lnsthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_DEFINE(NS_AOLSERVER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/pkgIndex.tcl.in b/vendor/thread2.7.3/pkgIndex.tcl.in
</span>deleted file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index 22f5f8ff4..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/pkgIndex.tcl.in
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,68 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -*- tcl -*-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tcl package index file, version 1.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {![package vsatisfies [package provide Tcl] 8.4]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Pre-8.4 Tcl interps we dont support at all.  Bye!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # 9.0+ Tcl interps are only supported on 32-bit platforms.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![package vsatisfies [package provide Tcl] 9.0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       || ($::tcl_platform(pointerSize) != 4)} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# All Tcl 8.4+ interps can [load] Thread @PACKAGE_VERSION@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# For interps that are not thread-enabled, we still call [package ifneeded].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This is contrary to the usual convention, but is a good idea because we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cannot imagine any other version of Thread that might succeed in a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# thread-disabled interp.  There's nothing to gain by yielding to other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# competing callers of [package ifneeded Thread].  On the other hand,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# deferring the error has the advantage that a script calling
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# [package require Thread] in a thread-disabled interp gets an error message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# about a thread-disabled interp, instead of the message
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# "can't find package Thread".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package ifneeded Thread @PACKAGE_VERSION@ [list load [file join $dir @PKG_LIB_FILE@]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# package Ttrace uses some support machinery.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In Tcl 8.4 interps we use some older interfaces
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {![package vsatisfies [package provide Tcl] 8.5]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    package ifneeded Ttrace @PACKAGE_VERSION@ "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [list proc @PACKAGE_NAME@_source {dir} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[info exists ::env(TCL_THREAD_LIBRARY)] &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [file readable $::env(TCL_THREAD_LIBRARY)/ttrace.tcl]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       source $::env(TCL_THREAD_LIBRARY)/ttrace.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } elseif {[file readable [file join $dir .. lib ttrace.tcl]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       source [file join $dir .. lib ttrace.tcl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } elseif {[file readable [file join $dir ttrace.tcl]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       source [file join $dir ttrace.tcl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if {[namespace which ::ttrace::update] ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ::ttrace::update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [list @PACKAGE_NAME@_source $dir]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [list rename @PACKAGE_NAME@_source {}]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In Tcl 8.5+ interps; use [::apply]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package ifneeded Ttrace @PACKAGE_VERSION@ [list ::apply {{dir} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::env(TCL_THREAD_LIBRARY)] &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [file readable $::env(TCL_THREAD_LIBRARY)/ttrace.tcl]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   source $::env(TCL_THREAD_LIBRARY)/ttrace.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[file readable [file join $dir .. lib ttrace.tcl]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   source [file join $dir .. lib ttrace.tcl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[file readable [file join $dir ttrace.tcl]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   source [file join $dir ttrace.tcl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[namespace which ::ttrace::update] ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ::ttrace::update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}} $dir]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/README b/vendor/thread2.7.3/tcl/README
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index fe1b7512a..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/README
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,32 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Software here is provided as example of making some interesting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-things and applications using the Tcl threading extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Currently, following packages are supplied:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tpool/    Example Tcl-only implementation of thread pools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             The threading extension includes an efficient
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             threadpool implementation in C. This file is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             provided as a fully functional example on how this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             functionality could be implemented in Tcl alone.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   phttpd/   MT-enabled httpd server. It uses threadpool to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             distribute incoming requests among several worker 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             threads in the threadpool. This way blocking 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             requests may be handled much better, w/o halting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             the event loop of the main responder thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             In this directory you will also find the uhttpd.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             This is the same web-server but operating in the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             event-loop mode alone, no threadpool support. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             This is good for comparison purposes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cmdsrv/   Socket command-line server. Each new connection 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             gets new thread, thus allowing multiple outstanding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             blocking calls without halting the event loop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To play around with above packages, change to the corresponding 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-directory and source files in the Tcl8.4 (or later) Tcl shell. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Be sure to have the latest Tcl threading extension installed in 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-your package path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EOF
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/cmdsrv/cmdsrv.tcl b/vendor/thread2.7.3/tcl/cmdsrv/cmdsrv.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 8ce7cef38..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/cmdsrv/cmdsrv.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,310 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Simple socket command server. Supports many simultaneous sessions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Works in thread mode with each new connection receiving a new thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    cmdsrv::create port ?-idletime value? ?-initcmd cmd?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    port         Tcp port where the server listens
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    -idletime    # of sec to idle before tearing down socket (def: 300 sec)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    -initcmd     script to initialize new worker thread (def: empty)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Example:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    # tclsh8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % source cmdsrv.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % cmdsrv::create 5000 -idletime 60
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    Starts the server on the port 5000, sets idle timer to 1 minute. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    You can now use "telnet" utility to connect.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Tcl    8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Thread 2.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval cmdsrv {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data; # Stores global configuration options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::create --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Start the server on the given Tcp port.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port   Port where the server is listening
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   args   Variable number of arguments
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::create {port args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[llength $args] % 2} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        error "wrong \# arguments, should be: key1 val1 key2 val2..."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Setup default pool data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set data {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -idletime 300000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -initcmd  {source cmdsrv.tcl}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Override with user-supplied data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach {arg val} $args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -- $arg {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -idletime {set data($arg) [expr {$val*1000}]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -initcmd  {append data($arg) \n $val}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                error "unsupported pool option \"$arg\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Start the server on the given port. Note that we wrap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the actual accept with a helper after/idle callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is a workaround for a well-known Tcl bug.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server [namespace current]::_Accept -myaddr 127.0.0.1 $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::_Accept --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Helper procedure to solve Tcl shared channel bug when responding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   to incoming socket connection and transfering the channel to other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   thread(s).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ipaddr IP address of the remote peer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port   Tcp port used for this connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::_Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after idle [list [namespace current]::Accept $s $ipaddr $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::Accept --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Accepts the incoming socket connection, creates the worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ipaddr IP address of the remote peer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port   Tcp port used for this connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Creates new worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::Accept {s ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Configure socket for sane operation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fconfigure $s -blocking 0 -buffering none -translation {auto crlf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Emit the prompt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts -nonewline $s "% "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Create worker thread and transfer socket ownership
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create [append data(-initcmd) \n thread::wait]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $s ; # This flushes the socket as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Start event-loop processing in the remote thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array set [namespace current]::data {[array get data]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fileevent $s readable {[namespace current]::Read $s}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        proc exit args {[namespace current]::SockDone $s}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [namespace current]::StartIdleTimer $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::Read --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Event loop procedure to read data from socket and collect the 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   command to execute. If the command read from socket is complete
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   it executes the command are prints the result back. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::Read {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    StopIdleTimer $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Cover client closing connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[eof $s] || [catch {read $s} line]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [SockDone $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$line == "\n" || $line == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {puts -nonewline $s "% "}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [SockDone $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [StartIdleTimer $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Construct command line to eval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    append data(cmd) $line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info complete $data(cmd)] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {puts -nonewline $s "> "}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [SockDone $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [StartIdleTimer $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Run the command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {uplevel \#0 $data(cmd)} ret
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {puts $s $ret}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [SockDone $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set data(cmd) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {puts -nonewline $s "% "}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [SockDone $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    StartIdleTimer $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::SockDone --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Tears down the thread and closes the socket if the remote peer has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   closed his side of the comm channel. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Worker thread gets released.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::SockDone {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {close $s}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::StopIdleTimer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Cancel the connection idle timer. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  After event gets cancelled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::StopIdleTimer {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists data(idleevent)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after cancel $data(idleevent)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        unset data(idleevent)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cmdsrv::StartIdleTimer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Initiates the connection idle timer. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s      incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  After event gets posted.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cmdsrv::StartIdleTimer {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set data(idleevent) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [after $data(-idletime) [list [namespace current]::SockDone $s]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF $RCSfile: cmdsrv.tcl,v $
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Emacs Setup Variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# indent-tabs-mode: nil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tcl-basic-offset: 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/phttpd/index.htm b/vendor/thread2.7.3/tcl/phttpd/index.htm
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 324f1f7cc..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/phttpd/index.htm
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,5 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<h3>Hallo World</h3>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-</html>
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/phttpd/phttpd.tcl b/vendor/thread2.7.3/tcl/phttpd/phttpd.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 5a01a7552..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/phttpd/phttpd.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,686 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Simple Sample httpd/1.0 server in 250 lines of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Stephen Uhler / Brent Welch (c) 1996 Sun Microsystems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Modified to use namespaces, direct url-to-procedure access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and thread pool package. Grown little larger since ;)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    phttpd::create port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    port         Tcp port where the server listens
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Example:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    # tclsh8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % source phttpd.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % phttpd::create 5000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    Starts the server on the port 5000. Also, look at the Httpd array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    definition in the "phttpd" namespace declaration to find out 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    about other options you may put on the command line.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    You can use: http://localhost:5000/monitor URL to test the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    server functionality.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Tcl    8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Thread 2.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Modify the following in order to load the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# example Tcl implementation of threadpools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Per default, the C-level threadpool is used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval [set TCL_TPOOL {source ../tpool/tpool.tcl}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval phttpd {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd;           # Internal server state and config params
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable MimeTypes;       # Cache of file-extension/mime-type
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable HttpCodes;       # Portion of well-known http return codes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable ErrorPage;       # Format of error response page in html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set Httpd {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -name  phttpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -vers  1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -root  "."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -index index.htm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set HttpCodes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        400  "Bad Request"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        401  "Not Authorized"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        404  "Not Found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        500  "Server error"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set MimeTypes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        {}   "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .txt "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .htm "text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .htm "text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .gif "image/gif"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .jpg "image/jpeg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .png "image/png"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ErrorPage {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <title>Error: %1$s %2$s</title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <h1>%3$s</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <p>Problem in accessing "%4$s" on this server.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <hr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <i>%5$s/%6$s Server at %7$s Port %8$s</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::create --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Start the server by listening for connections on the desired port.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   args
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::create {port args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set arglen [llength $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$arglen} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$arglen % 2} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            error "wrong \# args, should be: key1 val1 key2 val2..."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set opts [array names Httpd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach {arg val} $args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[lsearch $opts $arg] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                error "unknown option \"$arg\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set Httpd($arg) $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Create thread pool with max 8 worker threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::TCL_TPOOL] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Using the internal C-based thread pool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set initcmd "source ../phttpd/phttpd.tcl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Using the Tcl-level hand-crafted thread pool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append initcmd "source ../phttpd/phttpd.tcl" \n $::TCL_TPOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set Httpd(tpid) [tpool::create -maxworkers 8 -initcmd $initcmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Start the server on the given port. Note that we wrap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the actual accept with a helper after/idle callback.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is a workaround for a well-known Tcl bug.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server [namespace current]::_Accept $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::_Accept --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Helper procedure to solve Tcl shared-channel bug when responding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   to incoming connection and transfering the channel to other thread(s).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   sock   incoming socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ipaddr IP address of the remote peer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port   Tcp port used for this connection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::_Accept {sock ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after idle [list [namespace current]::Accept $sock $ipaddr $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Accept --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Accept a new connection from the client.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ipaddr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Accept {sock ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Setup the socket for sane operation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fconfigure $sock -blocking 0 -translation {auto crlf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Detach the socket from current interpreter/tnread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # One of the worker threads will attach it again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::detach $sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Send the work ticket to threadpool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tpool::post -detached $Httpd(tpid) [list [namespace current]::Ticket $sock]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Ticket --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Job ticket to run in the thread pool thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Ticket {sock} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::attach $sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fileevent $sock readable [list [namespace current]::Read $sock]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # End of processing is signalized here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This will release the worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait [namespace current]::done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Read --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Read data from client and parse incoming http request.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Read {sock} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set data(sock) $sock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {gets $data(sock) line} readCount] || [eof $data(sock)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![info exists data(state)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set pat {(POST|GET) ([^?]+)\??([^ ]*) HTTP/1\.[0-9]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[regexp $pat $line x data(proto) data(url) data(query)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set data(state) mime
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Log error "bad request line: (%s)" $line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Error 400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # string compare $readCount 0 maps -1 to -1, 0 to 0, and > 0 to 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set state [string compare $readCount 0],$data(state),$data(proto)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -- $state {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "0,mime,GET" - "0,query,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Respond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "0,mime,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set data(state) query
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set data(query) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "1,mime,POST" - "1,mime,GET" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if [regexp {([^:]+):[   ]*(.*)}  $line dummy key value] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set data(mime,[string tolower $key]) $value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "1,query,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                append data(query) $line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set clen $data(mime,content-length)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {($clen - [string length $data(query)]) <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Respond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if [eof $data(sock)] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Log error "unexpected eof; client closed connection"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Log error "bad http protocol state: %s" $state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Error 400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return [Done]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Done --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Close the connection socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Done {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $data(sock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists data]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        unset data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set done 1 ; # Releases the request thread (See Ticket procedure)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Respond --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Respond to the query.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Respond {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info commands $data(url)] == $data(url)} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Service URL-procedure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $data(sock) "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $data(sock) "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $data(sock) "Last-Modified: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {$data(url) data} err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "%s: %s" $data(url) $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Service regular file path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set mypath [Url2File $data(url)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![catch {open $mypath} i]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) "Last-Modified: [Date [file mtime $mypath]]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) "Content-Type: [ContentType $mypath]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) "Content-Length: [file size $mypath]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $data(sock) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fconfigure $data(sock) -translation binary -blocking 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fconfigure $i          -translation binary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fcopy $i $data(sock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                close $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "%s: %s" $data(url) $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Error 404
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::ContentType --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Convert the file suffix into a mime type.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::ContentType {path} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Convert the file suffix into a mime type.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable MimeTypes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set type "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {set type $MimeTypes([file extension $path])}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $type
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Error --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Emit error page
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   code
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Error {code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable HttpCodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable ErrorPage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    append data(url) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set msg \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [format $ErrorPage     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $code             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $HttpCodes($code) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $HttpCodes($code) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $data(url)        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(-name)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(-vers)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             [info hostname]   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             80                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $data(sock) "HTTP/1.0 $code $HttpCodes($code)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $data(sock) "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $data(sock) "Content-Length: [string length $msg]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $data(sock) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $data(sock) $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Date --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Generate a date string in HTTP format.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   seconds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Date {{seconds 0}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Generate a date string in HTTP format.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$seconds == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set seconds [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    clock format $seconds -format {%a, %d %b %Y %T %Z} -gmt 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Log --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Log an httpd transaction.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   reason
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   format
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   args
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Log {reason format args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set messg [eval format [list $format] $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set stamp [clock format [clock seconds] -format "%d/%b/%Y:%H:%M:%S"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stderr "\[$stamp\]\[-thread[thread::id]-\] $reason: $messg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::Url2File --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Convert a url into a pathname.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   url
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::Url2File {url} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend pathlist $Httpd(-root)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set level 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach part [split $url /] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set part [CgiMap $part]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if [regexp {[:/]} $part] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -- $part {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "." { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ".." {incr level -1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            default {incr level}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$level <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend pathlist $part
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [eval file join $pathlist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[file isdirectory $file]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [file join $file $Httpd(-index)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::CgiMap --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Decode url-encoded strings.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::CgiMap {data} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {\+} $data { } data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {([][$\\])} $data {\\\1} data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {%([0-9a-fA-F][0-9a-fA-F])} $data {[format %c 0x\1]} data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [subst $data]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# phttpd::QueryMap --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Decode url-encoded query into key/value pairs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   query
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc phttpd::QueryMap {query} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {[&=]} $query { }    query
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {  }   $query { {} } query; # Othewise we lose empty values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach {key val} $query {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend res [CgiMap $key] [CgiMap $val]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# monitor --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Procedure used to test the phttpd server. It responds on the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        http://<hostname>:<port>/monitor
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc /monitor {array} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar $array data ; # Holds the socket to remote client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Emit headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "Date: [phttpd::Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "Content-Type: text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Emit body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <h3>[clock format [clock seconds]]</h3>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 1 ; # Simulate blocking call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        </body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        </html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF $RCSfile: phttpd.tcl,v $
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Emacs Setup Variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# indent-tabs-mode: nil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tcl-basic-offset: 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/phttpd/uhttpd.tcl b/vendor/thread2.7.3/tcl/phttpd/uhttpd.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0680523c3..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/phttpd/uhttpd.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,416 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# uhttpd.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Simple Sample httpd/1.0 server in 250 lines of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Stephen Uhler / Brent Welch (c) 1996 Sun Microsystems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Modified to use namespaces and direct url-to-procedure access (zv).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Eh, due to this, and nicer indenting, it's now 150 lines longer :-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    phttpd::create port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    port         Tcp port where the server listens
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Example:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    # tclsh8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % source uhttpd.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % uhttpd::create 5000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    % vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    Starts the server on the port 5000. Also, look at the Httpd array
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    definition in the "uhttpd" namespace declaration to find out 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    about other options you may put on the command line.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    You can use: http://localhost:5000/monitor URL to test the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#    server functionality.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) Stephen Uhler / Brent Welch (c) 1996 Sun Microsystems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval uhttpd {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd;           # Internal server state and config params
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable MimeTypes;       # Cache of file-extension/mime-type
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable HttpCodes;       # Portion of well-known http return codes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable ErrorPage;       # Format of error response page in html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set Httpd {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -name    uhttpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -vers    1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -root    ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -index   index.htm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set HttpCodes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        400  "Bad Request"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        401  "Not Authorized"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        404  "Not Found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        500  "Server error"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set MimeTypes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        {}   "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .txt "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .htm "text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .htm "text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .gif "image/gif"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .jpg "image/jpeg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        .png "image/png"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ErrorPage {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <title>Error: %1$s %2$s</title>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <h1>%3$s</h1>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <p>Problem in accessing "%4$s" on this server.</p>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <hr>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <i>%5$s/%6$s Server at %7$s Port %8$s</i>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::create {port args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Start the server by listening for connections on the desired port.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set arglen [llength $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$arglen} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$arglen % 2} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            error "wrong \# arguments, should be: key1 val1 key2 val2..."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set opts [array names Httpd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach {arg val} $args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[lsearch $opts $arg] == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                error "unknown option \"$arg\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set Httpd($arg) $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set Httpd(port) $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set Httpd(host) [info hostname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    socket -server [namespace current]::Accept $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::respond {s status contype data {length 0}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $s "HTTP/1.0 $status"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $s "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $s "Content-Type: $contype"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$length} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s "Content-Length: $length" 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s "Content-Length: [string length $data]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $s ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $s $data 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Accept {newsock ipaddr port} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Accept a new connection from the client.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar \#0 [namespace current]::Httpd$newsock data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fconfigure $newsock -blocking 0 -translation {auto crlf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set data(ipaddr) $ipaddr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fileevent $newsock readable [list [namespace current]::Read $newsock]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Read {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Read data from client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar \#0 [namespace current]::Httpd$s data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {gets $s line} readCount] || [eof $s]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [Done $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$readCount == -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return ;# Insufficient data on non-blocking socket !
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists data(state)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set pat {(POST|GET) ([^?]+)\??([^ ]*) HTTP/1\.[0-9]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[regexp $pat $line x data(proto) data(url) data(query)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [set data(state) mime]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "bad request line: %s" $line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Error $s 400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [Done $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # string compare $readCount 0 maps -1 to -1, 0 to 0, and > 0 to 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set state [string compare $readCount 0],$data(state),$data(proto)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch -- $state {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "0,mime,GET" - "0,query,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Respond $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "0,mime,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set data(state) query
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set data(query) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "1,mime,POST" - "1,mime,GET" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if [regexp {([^:]+):[   ]*(.*)}  $line dummy key value] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set data(mime,[string tolower $key]) $value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "1,query,POST" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            append data(query) $line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set clen $data(mime,content-length)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {($clen - [string length $data(query)]) <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Respond $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if [eof $s] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Log error "unexpected eof; client closed connection"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return [Done $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Log error "bad http protocol state: %s" $state
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Error $s 400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return [Done $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Done {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Close the connection socket and discard token
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    unset [namespace current]::Httpd$s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Respond {s} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Respond to the query.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar \#0 [namespace current]::Httpd$s data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[uplevel \#0 info proc $data(url)] == $data(url)} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Service URL-procedure first
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $s "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $s "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $s "Last-Modified: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [Done $s]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set data(sock) $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {$data(url) data} err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "%s: %s" $data(url) $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Service regular file path next.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set mypath [Url2File $data(url)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![catch {open $mypath} i]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s "Last-Modified: [Date [file mtime $mypath]]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s "Content-Type: [ContentType $mypath]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s "Content-Length: [file size $mypath]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $s ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fconfigure $s -translation binary -blocking 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fconfigure $i -translation binary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                fcopy $i $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                close $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Log error "%s: %s" $data(url) $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Error $s 404
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Done $s
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::ContentType {path} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Convert the file suffix into a mime type.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable MimeTypes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set type "text/plain"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {set type $MimeTypes([file extension $path])}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $type
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Error {s code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Emit error page.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable HttpCodes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable ErrorPage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar \#0 [namespace current]::Httpd$s data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    append data(url) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set msg \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [format $ErrorPage     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $code             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $HttpCodes($code) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $HttpCodes($code) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $data(url)        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(-name)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(-vers)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(host)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $Httpd(port)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s "HTTP/1.0 $code $HttpCodes($code)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s "Date: [Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s "Content-Length: [string length $msg]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $s $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Log error "client closed connection prematurely: %s" $err
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Date {{seconds 0}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Generate a date string in HTTP format.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$seconds == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set seconds [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    clock format $seconds -format {%a, %d %b %Y %T %Z} -gmt 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Log {reason format args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Log an httpd transaction.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set messg [eval format [list $format] $args]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set stamp [clock format [clock seconds] -format "%d/%b/%Y:%H:%M:%S"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stderr "\[$stamp\] $reason: $messg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::Url2File {url} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Convert a url into a pathname (this is probably not right)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable Httpd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend pathlist $Httpd(-root)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set level 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach part [split $url /] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set part [CgiMap $part]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if [regexp {[:/]} $part] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -- $part {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "." { }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ".." {incr level -1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            default {incr level}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$level <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend pathlist $part
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [eval file join $pathlist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[file isdirectory $file]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [file join $file $Httpd(-index)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::CgiMap {data} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Decode url-encoded strings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {\+} $data { } data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {([][$\\])} $data {\\\1} data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {%([0-9a-fA-F][0-9a-fA-F])} $data {[format %c 0x\1]} data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [subst $data]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc uhttpd::QueryMap {query} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # @c Decode url-encoded query into key/value pairs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {[&=]} $query { }    query
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    regsub -all {  }   $query { {} } query; # Othewise we lose empty values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach {key val} $query {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend res [CgiMap $key] [CgiMap $val]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc /monitor {array} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar $array data ; # Holds the socket to remote client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Emit headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "HTTP/1.0 200 OK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "Date: [uhttpd::Date]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) "Content-Type: text/html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Emit body
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        <h3>[clock format [clock seconds]]</h3>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 1 ; # Simulate blocking call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $data(sock) [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        </body>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        </html>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF $RCSfile: uhttpd.tcl,v $
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Emacs Setup Variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# indent-tabs-mode: nil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tcl-basic-offset: 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tcl/tpool/tpool.tcl b/vendor/thread2.7.3/tcl/tpool/tpool.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c33c957d3..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tcl/tpool/tpool.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,576 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tcl implementation of a threadpool paradigm in pure Tcl using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the Tcl threading extension 2.5 (or higher). 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This file is for example purposes only. The efficient C-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# threadpool implementation is already a part of the threading
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# extension starting with 2.5 version. Both implementations have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the same Tcl API so both can be used interchangeably. Goal of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# this implementation is to serve as an example of using the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# extension to implement some very common threading paradigms.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Beware: with time, as improvements are made to the C-level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# implementation, this Tcl one might lag behind.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Please consider this code as a working example only.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002 by Zoran Vasiljevic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Thread 2.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set thisScript [info script]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval tpool {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable afterevent "" ; # Idle timer event for worker threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable result        ; # Stores result from the worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable waiter        ; # Waits for an idle worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable jobsdone      ; # Accumulates results from worker threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Create shared array with a single element.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # It is used for automatic pool handles creation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ns [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lock $ns {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[tsv::exists $ns count] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsv::set $ns count 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $ns count -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable thisScript [info script]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::create --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Creates instance of a thread pool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   args Variable number of key/value arguments, as follows:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        -minworkers  minimum # of worker threads (def:0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        -maxworkers  maximum # of worker threads (def:4)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        -idletime    # of sec worker is idle before exiting (def:0 = never)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        -initcmd     script used to initialize new worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        -exitcmd     script run at worker thread exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Might create many new threads if "-minworkers" option is > 0.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   The id of the newly created thread pool. This id must be used 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   in all other tpool::* commands.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::create {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable thisScript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Get next threadpool handle and create the pool array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set usage "wrong \# args: should be \"[lindex [info level 1] 0]\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ?-minworkers count? ?-maxworkers count?\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ?-initcmd script? ?-exitcmd script?\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ?-idletime seconds?\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ns [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tpid [namespace tail $ns][tsv::incr $ns count]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lock $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $tpid name $tpid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Setup default pool data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::array set $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         thrworkers  ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         thrwaiters  ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         jobcounter  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         refcounter  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         numworkers  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -minworkers  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -maxworkers  4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -idletime    0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -initcmd    ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        -exitcmd    ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::set $tpid -initcmd  "source $thisScript"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Override with user-supplied data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[llength $args] % 2} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        error $usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach {arg val} $args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -- $arg {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -minworkers -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -maxworkers {tsv::set $tpid $arg $val}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -idletime   {tsv::set $tpid $arg [expr {$val*1000}]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -initcmd    {tsv::append $tpid $arg \n $val}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            -exitcmd    {tsv::append $tpid $arg \n $val}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                error $usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Start initial (minimum) number of worker threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for {set ii 0} {$ii < [tsv::set $tpid -minworkers]} {incr ii} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Worker $tpid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $tpid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::names --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Returns list of currently created threadpools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   List of active threadpoool identifiers or empty if none found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::names {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::names [namespace tail [namespace current]]*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::post --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Submits the new job to the thread pool. The caller might pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   the job in two modes: synchronous and asynchronous.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   For the synchronous mode, the pool implementation will retain
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   the result of the passed script until the caller collects it 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   using the "thread::get" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   For the asynchronous mode, the result of the script is ignored.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   args   Variable # of arguments with the following syntax:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          tpool::post ?-detached? tpid script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          -detached  flag to turn the async operation (ignore result)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          tpid       the id of the thread pool 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          script     script to pass to the worker thread for execution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Depends on the passed script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   The id of the posted job. This id is used later on to collect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   result of the job and set local variables accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   For asynchronously posted jobs, the return result is ignored
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   and this function returns empty result.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::post {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Parse command arguments.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ns [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set usage "wrong \# args: should be \"[lindex [info level 1] 0]\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ?-detached? tpoolId script\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[llength $args] == 2} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set detached 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tpid [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cmd  [lindex $args 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[llength $args] == 3} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[lindex $args 0] != "-detached"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            error $usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set detached 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tpid [lindex $args 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set cmd  [lindex $args 2]            
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        error $usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Find idle (or create new) worker thread. This is relatively
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # a complex issue, since we must honour the limits about number 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # of allowed worker threads imposed to us by the caller.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {$tid == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lock $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set tid [tsv::lpop $tpid thrworkers]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$tid == "" || [catch {thread::preserve $tid}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set tid ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsv::lpush $tpid thrwaiters [thread::id] end
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[tsv::set $tpid numworkers]<[tsv::set $tpid -maxworkers]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    Worker $tpid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$tid == ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            vwait ${ns}::waiter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Post the command to the worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$detached} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set j ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::send -async $tid [list ${ns}::Run $tpid 0 $cmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set j [tsv::incr $tpid jobcounter]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::send -async $tid [list ${ns}::Run $tpid $j $cmd] ${ns}::result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable jobsdone
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set jobsdone($j) ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::wait --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Waits for jobs sent with "thread::post" to finish.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid     Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   jobList  List of job id's done.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   jobLeft  List of jobs still pending.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Might eventually enter the event loop while waiting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   for the job result to arrive from the worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   It ignores bogus job ids.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Result of the job. If the job resulted in error, it sets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   the global errorInfo and errorCode variables accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::wait {tpid jobList {jobLeft ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable jobsdone
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$jobLeft != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        upvar $jobLeft jobleft
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set retlist ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set jobleft ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach j $jobList {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists jobsdone($j)] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            continue ; # Ignore (skip) bogus job ids
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$jobsdone($j) != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend retlist $j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend jobleft $j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[llength $retlist] == 0 && [llength $jobList]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # No jobs found; wait for the first one to get ready.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set jobleft $jobList
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while {1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            vwait [namespace current]::result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set doneid [lindex $result 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set jobsdone($doneid) $result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[lsearch $jobList $doneid] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend retlist $doneid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set x [lsearch $jobleft $doneid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set jobleft [lreplace $jobleft $x $x]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $retlist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::get --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Waits for a job sent with "thread::post" to finish.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid   Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   jobid  Id of the previously posted job.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Result of the job. If the job resulted in error, it sets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   the global errorInfo and errorCode variables accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::get {tpid jobid} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable jobsdone
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[lindex $jobsdone($jobid) 1] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        eval error [lrange $jobsdone($jobid) 2 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [lindex $jobsdone($jobid) 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::preserve --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Increments the reference counter of the threadpool, reserving it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   for the private usage..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid   Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Current number of threadpool reservations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::preserve {tpid} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::incr $tpid refcounter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::release --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Decrements the reference counter of the threadpool, eventually
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tearing the pool down if this was the last reservation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid   Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   If the number of reservations drops to zero or below
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   the threadpool is teared down.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Current number of threadpool reservations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::release {tpid} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lock $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[tsv::incr $tpid refcounter -1] <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # Release all workers threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach t [tsv::set $tpid thrworkers] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                thread::release -wait $t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsv::unset $tpid ; # This is not an error; it works!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Private procedures, not a part of the threadpool API.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::Worker --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Creates new worker thread. This procedure must be executed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   under the tsv lock.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid  Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Depends on the thread initialization script.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::Worker {tpid} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Create new worker thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [tsv::set $tpid -initcmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::preserve $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::incr  $tpid numworkers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lpush $tpid thrworkers $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Signalize waiter threads if any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set waiter [tsv::lpop $tpid thrwaiters]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$waiter != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::send -async $waiter [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set [namespace current]::waiter 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::Timer --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   This procedure should be executed within the worker thread only.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   It registers the callback for terminating the idle thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid  Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Thread may eventually exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::Timer {tpid} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lock $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[tsv::set $tpid  numworkers] > [tsv::set $tpid -minworkers]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # We have more workers than needed, so kill this one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # We first splice ourselves from the list of active
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # workers, adjust the number of workers and release 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # this thread, which may exit eventually.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set x [tsv::lsearch $tpid thrworkers [thread::id]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$x >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsv::lreplace $tpid thrworkers $x $x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsv::incr $tpid numworkers -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set exitcmd [tsv::set $tpid -exitcmd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$exitcmd != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    catch {eval $exitcmd}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                thread::release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tpool::Run --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   This procedure should be executed within the worker thread only.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   It performs the actual command execution in the worker thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   tpid  Name of the pool shared array.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   jid   The job id
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   cmd   The command to execute
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Side Effects:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   Many, depending of the passed command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   List for passing the evaluation result and status back.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tpool::Run {tpid jid cmd} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Cancel the idle timer callback, if any.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable afterevent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$afterevent != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after cancel $afterevent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Evaluate passed command and build the result list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set code [catch {uplevel \#0 $cmd} ret]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$code == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set res [list $jid 0 $ret]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set res [list $jid $code $ret $::errorInfo $::errorCode]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check to see if any caller is waiting to be serviced.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If yes, kick it out of the waiting state.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ns [namespace current]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::lock $tpid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::lpush $tpid thrworkers [thread::id]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set waiter [tsv::lpop $tpid thrwaiters]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$waiter != ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            thread::send -async $waiter [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set ${ns}::waiter 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Release the thread. If this turns out to be 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the last refcount held, don't bother to do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # any more work, since thread will soon exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[thread::release] <= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Register the idle timer again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[set idle [tsv::set $tpid -idletime]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set afterevent [after $idle [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${ns}::Timer $tpid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF $RCSfile: tpool.tcl,v $
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Emacs Setup Variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# indent-tabs-mode: nil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tcl-basic-offset: 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tclconfig/install-sh b/vendor/thread2.7.3/tclconfig/install-sh
</span>deleted file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index 7c34c3f92..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tclconfig/install-sh
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,528 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/bin/sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# install - install a program, script, or datafile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-scriptversion=2011-04-20.01; # UTC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This originates from X11R5 (mit/util/scripts/install.sh), which was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# later released in X11R6 (xc/config/util/install.sh) with the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# following copyright and license.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (C) 1994 X Consortium
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Permission is hereby granted, free of charge, to any person obtaining a copy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this software and associated documentation files (the "Software"), to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# deal in the Software without restriction, including without limitation the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# sell copies of the Software, and to permit persons to whom the Software is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# furnished to do so, subject to the following conditions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The above copyright notice and this permission notice shall be included in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# all copies or substantial portions of the Software.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Except as contained in this notice, the name of the X Consortium shall not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# be used in advertising or otherwise to promote the sale, use or other deal-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ings in this Software without prior written authorization from the X Consor-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tium.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FSF changes to this file are in the public domain.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Calling this script install-sh is preferred over install.sh, to prevent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# `make' implicit rules from creating a file called install from it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# when there is no Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This script is compatible with the BSD install script, but was written
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# from scratch.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-nl='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IFS=" ""    $nl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# set DOITPROG to echo to test this script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Don't use :- since 4.3BSD and earlier shells don't like it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-doit=${DOITPROG-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$doit"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doit_exec=exec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  doit_exec=$doit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Put in absolute file names if you don't have them in your path;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# or use environment vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chgrpprog=${CHGRPPROG-chgrp}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chmodprog=${CHMODPROG-chmod}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chownprog=${CHOWNPROG-chown}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cmpprog=${CMPPROG-cmp}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cpprog=${CPPROG-cp}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mkdirprog=${MKDIRPROG-mkdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mvprog=${MVPROG-mv}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rmprog=${RMPROG-rm}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stripprog=${STRIPPROG-strip}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-posix_glob='?'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initialize_posix_glob='
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  test "$posix_glob" != "?" || {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (set -f) 2>/dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      posix_glob=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      posix_glob=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-posix_mkdir=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Desired mode of installed file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mode=0755
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chgrpcmd=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chmodcmd=$chmodprog
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chowncmd=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mvcmd=$mvprog
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rmcmd="$rmprog -f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-stripcmd=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-src=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dst=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dir_arg=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dst_arg=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-copy_on_change=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-no_target_directory=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-usage="\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   or: $0 [OPTION]... SRCFILES... DIRECTORY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   or: $0 [OPTION]... -d DIRECTORIES...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the 1st form, copy SRCFILE to DSTFILE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-In the 4th, create DIRECTORIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     --help     display this help and exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     --version  display version info and exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -c            (ignored)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -C            install only if different (preserve the last data modification time)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -d            create directories instead of installing files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -g GROUP      $chgrpprog installed files to GROUP.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -m MODE       $chmodprog installed files to MODE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -o USER       $chownprog installed files to USER.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -s            $stripprog installed files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -S            $stripprog installed files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -t DIRECTORY  install into DIRECTORY.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  -T            report an error if DSTFILE is a directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Environment variables override the default commands:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  RMPROG STRIPPROG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-while test $# -ne 0; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $1 in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -c) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -C) copy_on_change=true;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -d) dir_arg=true;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -g) chgrpcmd="$chgrpprog $2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shift;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --help) echo "$usage"; exit $?;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -m) mode=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $mode in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *' '* | *'    '* | *'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-'*   | *'*'* | *'?'* | *'['*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       echo "$0: invalid mode: $mode" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exit 1;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shift;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -o) chowncmd="$chownprog $2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shift;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -s) stripcmd=$stripprog;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -S) stripcmd="$stripprog $2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shift;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -t) dst_arg=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   shift;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -T) no_target_directory=true;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --version) echo "$0 $scriptversion"; exit $?;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --)    shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -*)    echo "$0: invalid option: $1" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 1;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)  break;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # When -d is used, all remaining arguments are directories to create.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # When -t is used, the destination is already specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Otherwise, the last argument is the destination.  Remove it from $@.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  for arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -n "$dst_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # $@ is not empty: it contains at least $arg.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      set fnord "$@" "$dst_arg"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      shift # fnord
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    shift # arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dst_arg=$arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test $# -eq 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -z "$dir_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "$0: no input file specified." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # It's OK to call `install-sh -d' without argument.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # This can happen when creating conditional directories.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if test -z "$dir_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  do_exit='(exit $ret); exit $ret'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap "ret=129; $do_exit" 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap "ret=130; $do_exit" 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap "ret=141; $do_exit" 13
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  trap "ret=143; $do_exit" 15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Set umask so as not to create temps with too-generous modes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # However, 'strip' requires both read and write access to temps.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $mode in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Optimize common cases.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *644) cp_umask=133;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *755) cp_umask=22;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *[0-7])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test -z "$stripcmd"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   u_plus_rw=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   u_plus_rw='% 200'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test -z "$stripcmd"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   u_plus_rw=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   u_plus_rw=,u+rw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      cp_umask=$mode$u_plus_rw;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for src
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  # Protect names starting with `-'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  case $src in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -*) src=./$src;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$dir_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dst=$src
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dstdir=$dst
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test -d "$dstdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dstdir_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # might cause directories to be created, which would be especially bad
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # if $src (and thus $dsttmp) contains '*'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test ! -f "$src" && test ! -d "$src"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$0: $src does not exist." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -z "$dst_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      echo "$0: no destination specified." >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dst=$dst_arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Protect names starting with `-'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $dst in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      -*) dst=./$dst;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If destination is a directory, append the input filename; won't work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # if double slashes aren't ignored.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -d "$dst"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test -n "$no_target_directory"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo "$0: $dst_arg: Is a directory" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      dstdir=$dst
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      dst=$dstdir/`basename "$src"`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      dstdir_status=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Prefer dirname, but fall back on a substitute if dirname fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      dstdir=`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (dirname "$dst") 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        X"$dst" : 'X\(//\)[^/]' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        X"$dst" : 'X\(//\)$' \| \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   echo X"$dst" |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              s//\1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              q
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /^X\(\/\/\)[^/].*/{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              s//\1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              q
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /^X\(\/\/\)$/{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              s//\1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              q
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /^X\(\/\).*/{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              s//\1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              q
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            s/.*/./; q'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      `
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      test -d "$dstdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      dstdir_status=$?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  obsolete_mkdir_used=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test $dstdir_status != 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $posix_mkdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      '')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Create intermediate dirs using mode 755 as modified by the umask.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This is like FreeBSD 'install' as of 1997-10-28.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   umask=`umask`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $stripcmd.$umask in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     # Optimize common cases.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *[2367][2367]) mkdir_umask=$umask;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *[0-7])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       mkdir_umask=`expr $umask + 22 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         - $umask % 100 % 40 + $umask % 20 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         - $umask % 10 % 4 + $umask % 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *) mkdir_umask=$umask,go-w;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # With -d, create the new directory with the user-specified mode.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Otherwise, rely on $mkdir_umask.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test -n "$dir_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     mkdir_mode=-m$mode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     mkdir_mode=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   posix_mkdir=false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $umask in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *[123567][0-7][0-7])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # POSIX mkdir -p sets u+wx bits regardless of umask, which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (umask $mkdir_umask &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if test -z "$dir_arg" || {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              # Check for POSIX incompatibilities with -m.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              # other-writeable bit of parent directory when it shouldn't.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              ls_ld_tmpdir=`ls -ld "$tmpdir"`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              case $ls_ld_tmpdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                d????-?r-*) different_mode=700;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                d????-?--*) different_mode=755;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                *) false;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              esac &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              $mkdirprog -m$different_mode -p -- "$tmpdir" && {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         then posix_mkdir=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         rmdir "$tmpdir/d" "$tmpdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         # Remove any dirs left behind by ancient mkdir implementations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       trap '' 0;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $posix_mkdir && (
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   umask $mkdir_umask &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    then :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # The umask is ridiculous, or mkdir does not conform to POSIX,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # or it failed possibly due to a race condition.  Create the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # directory the slow way, step by step, checking for races as we go.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      case $dstdir in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*) prefix='/';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -*) prefix='./';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)  prefix='';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      eval "$initialize_posix_glob"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      oIFS=$IFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      IFS=/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $posix_glob set -f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      set fnord $dstdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      shift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $posix_glob set +f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      IFS=$oIFS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      prefixes=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      for d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   test -z "$d" && continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix=$prefix$d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test -d "$prefix"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     prefixes=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     if $posix_mkdir; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       (umask=$mkdir_umask &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Don't fail if two instances are running concurrently.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       test -d "$prefix" || exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case $prefix in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         *) qprefix=$prefix;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       prefixes="$prefixes '$qprefix'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix=$prefix/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      if test -n "$prefixes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Don't fail if two instances are running concurrently.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (umask $mkdir_umask &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "\$doit_exec \$mkdirprog $prefixes") ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     test -d "$dstdir" || exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   obsolete_mkdir_used=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  if test -n "$dir_arg"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Make a couple of temp file names in the proper directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dsttmp=$dstdir/_inst.$$_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    rmtmp=$dstdir/_rm.$$_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Trap to clean up those temp files at exit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Copy the file name to the temp name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # and set any options; do chmod last to preserve setuid bits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If any of these fail, we abort the whole thing.  If we want to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # ignore errors from any of these, just make sure not to ignore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # errors from the above "$doit $cpprog $src $dsttmp" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If -C, don't bother to copy if it wouldn't change the file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if $copy_on_change &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       old=`LC_ALL=C ls -dlL "$dst"      2>/dev/null` &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       new=`LC_ALL=C ls -dlL "$dsttmp"   2>/dev/null` &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval "$initialize_posix_glob" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $posix_glob set -f &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       set X $old && old=:$2:$4:$5:$6 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       set X $new && new=:$2:$4:$5:$6 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $posix_glob set +f &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       test "$old" = "$new" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      rm -f "$dsttmp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # Rename the file to the real destination.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # The rename failed, perhaps because mv can't rename something else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # to itself, or perhaps because mv is so ancient that it does not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      # support -f.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Now remove or move aside any old file at destination location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # We try this two ways since rm can't unlink itself on some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # systems and the destination file might be busy for other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # reasons.  In this case, the final cleanup might fail but the new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # file should still install successfully.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     test ! -f "$dst" ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     $doit $rmcmd -f "$dst" 2>/dev/null ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     } ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     { echo "$0: cannot unlink or rename $dst" >&2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       (exit 1); exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Now rename the file to the real destination.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $doit $mvcmd "$dsttmp" "$dst"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi || exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    trap '' 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# eval: (add-hook 'write-file-hooks 'time-stamp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# time-stamp-start: "scriptversion="
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# time-stamp-format: "%:y-%02m-%02d.%02H"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# time-stamp-time-zone: "UTC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# time-stamp-end: "; # UTC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tclconfig/tcl.m4 b/vendor/thread2.7.3/tclconfig/tcl.m4
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 328508f31..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tclconfig/tcl.m4
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,4192 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tcl.m4 --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This file provides a set of autoconf macros to help TEA-enable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  a Tcl extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1999-2000 Ajuba Solutions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002-2005 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_PREREQ(2.57)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl TEA extensions pass us the version of TEA they think they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl are compatible with (must be set in TEA_INIT below)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl TEA_VERSION="3.9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Possible values for key variables defined:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PLATFORM        - windows unix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PATH_TCLCONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the tclConfig.sh file and perform a sanity check on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the Tcl compile flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --with-tcl=...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_BIN_DIR     Full path to the directory containing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          the tclConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_TCLCONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dnl TEA specific: Make sure we are initialized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_INIT])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Ok, lets find the tcl configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_tcl}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_tcl in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_tcl=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_ARG_WITH(tcl,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_HELP_STRING([--with-tcl],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [directory containing tcl configuration (tclConfig.sh)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       with_tclconfig="${withval}")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for Tcl configuration])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(ac_cv_c_tclconfig,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-tcl was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_tclconfig}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "${with_tclconfig}" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               */tclConfig.sh )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test -f "${with_tclconfig}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${with_tclconfig}/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a private Tcl installation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # on Darwin, check in Framework installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Network/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /System/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/Tcl.framework/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: on Windows, check in common installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -a x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d C:/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few common install locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ${libdir} 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${exec_prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/local/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/contrib/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib64 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib/tcl8.6 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib/tcl8.5 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few other private locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_tclconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_BIN_DIR="# no Tcl configs found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_tcl=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_BIN_DIR="${ac_cv_c_tclconfig}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PATH_TKCONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the tkConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --with-tk=...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_BIN_DIR      Full path to the directory containing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          the tkConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_TKCONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Ok, lets find the tk configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_tk}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_tk in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_tk=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_ARG_WITH(tk,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_HELP_STRING([--with-tk],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [directory containing tk configuration (tkConfig.sh)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       with_tkconfig="${withval}")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for Tk configuration])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(ac_cv_c_tkconfig,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-tkconfig was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_tkconfig}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "${with_tkconfig}" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               */tkConfig.sh )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test -f "${with_tkconfig}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${with_tkconfig}/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a private Tk library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../tk \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../tk \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../../tk \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # on Darwin, check in Framework installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /Network/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /System/Library/Frameworks 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/Tk.framework/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few common install locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ${libdir} 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${exec_prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/local/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/contrib/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib64 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: on Windows, check in common installation locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -a x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d C:/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few other private locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../tk \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TEA_PLATFORM}" = "windows" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -a -f "$i/win/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_tkconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TK_BIN_DIR="# no Tk configs found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_tk=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TK_BIN_DIR="${ac_cv_c_tkconfig}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_LOAD_TCLCONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Load the tclConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_BIN_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_BIN_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_SRC_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_LIB_FILE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_LOAD_TCLCONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([loading])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   . "${TCL_BIN_DIR}/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TCL_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the TCL_BIN_DIR is the build directory (not the install directory),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # then set the common variable name to the value of the build variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # For example, the variable TCL_LIB_SPEC will be set to the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # installed and uninstalled version of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # If Tcl was built as a framework, attempt to use the libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # from the framework at the given location so that linking works
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # against Tcl.framework installed in an arbitrary location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *TCL_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TCL_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_PATCH_LEVEL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_BIN_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_SRC_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LIB_FLAG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_STUB_LIB_FLAG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_STUB_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([platform])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hold_cc=$CC; CC="$TCL_CC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_TRY_COMPILE(,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #error win32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_PLATFORM="unix"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGPATH=echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CC=$hold_cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT($TEA_PLATFORM)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The BUILD_$pkg is to define the correct extern storage class
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # handling when making this package
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [Building extension source?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do this here as we have fully defined TEA_PLATFORM now
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CLEANFILES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_DEFS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_EXTRA_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LD_FLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_SHLIB_LD_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_LOAD_TKCONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Load the tkConfig.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_BIN_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets the following vars that should be in tkConfig.sh:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_BIN_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_LOAD_TKCONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([loading])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   . "${TK_BIN_DIR}/tkConfig.sh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TK_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the TK_BIN_DIR is the build directory (not the install directory),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # then set the common variable name to the value of the build variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # For example, the variable TK_LIB_SPEC will be set to the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # instead of TK_BUILD_LIB_SPEC since it will work with both an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # installed and uninstalled version of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TK_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # If Tk was built as a framework, attempt to use the libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # from the framework at the given location so that linking works
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # against Tk.framework installed in an arbitrary location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case ${TK_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *TK_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for i in "`cd "${TK_BIN_DIR}"; pwd`" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # eval is required to do the TK_DBGX substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: Ensure windowingsystem is defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "unix" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case ${TK_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *MAC_OSX_TK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_WINDOWINGSYSTEM="aqua"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_WINDOWINGSYSTEM="x11"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_WINDOWINGSYSTEM="win32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_BIN_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_SRC_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_LIB_FLAG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_STUB_LIB_FLAG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_STUB_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_XINCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PROG_TCLSH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Determine the fully qualified path name of the tclsh executable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  in the Tcl build directory or the tclsh installed in a bin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  directory. This macro will correctly determine the name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  of the tclsh executable even if tclsh has not yet been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  built in the build directory. The tclsh found is always
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  associated with a tclConfig.sh file. This tclsh should be used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  only for running extension test cases. It should never be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  or generation of files (like pkgIndex.tcl) at build time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCLSH_PROG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PROG_TCLSH], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for tclsh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tclConfig.sh is in Tcl build directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tclConfig.sh is in install location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test -f "$i/${TCLSH_PROG}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([${TCLSH_PROG}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCLSH_PROG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PROG_WISH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Determine the fully qualified path name of the wish executable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  in the Tk build directory or the wish installed in a bin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  directory. This macro will correctly determine the name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  of the wish executable even if wish has not yet been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  built in the build directory. The wish found is always
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  associated with a tkConfig.sh file. This wish should be used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  only for running extension test cases. It should never be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  or generation of files (like pkgIndex.tcl) at build time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          WISH_PROG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PROG_WISH], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for wish])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${TK_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tkConfig.sh is in Tk build directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            WISH_PROG="${TK_BIN_DIR}/wish"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # tkConfig.sh is in install location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if test -f "$i/${WISH_PROG}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([${WISH_PROG}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(WISH_PROG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ENABLE_SHARED --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Allows the building of shared libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --enable-shared=yes|no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          STATIC_BUILD    Used for building import/export libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          on Windows.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          SHARED_BUILD    Value of 1 or 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ENABLE_SHARED], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([how to build libraries])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(shared,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-shared],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [build and link with shared libraries (default: on)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [tcl_ok=$enableval], [tcl_ok=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${enable_shared+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   enableval="$enable_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([shared])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SHARED_BUILD=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([static])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SHARED_BUILD=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(SHARED_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ENABLE_THREADS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify if thread support should be enabled.  If "yes" is specified
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  as an arg (optional), threads are enabled by default, "no" means
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  threads are disabled.  "yes" is the default.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TCL_THREADS is checked so that if you are compiling an extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  against a threaded core, your extension must be compiled threaded
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Note that it is legal to have a thread enabled extension run in a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  threaded or non-threaded Tcl core, but a non-threaded extension may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  only run in a non-threaded Tcl core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --enable-threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          THREADS_LIBS    Thread library(s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_THREADS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          _REENTRANT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          _THREAD_SAFE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ENABLE_THREADS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(threads,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-threads],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [build with threads]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [tcl_ok=$enableval], [tcl_ok=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${enable_threads+set}" = set; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   enableval="$enable_threads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=$enableval
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_THREADS=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" != "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We are always OK on Windows, so check what this platform wants:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # USE_THREAD_ALLOC tells us to try the special thread-based
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # allocator that significantly reduces lock contention
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(USE_THREAD_ALLOC, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [Do we want to use the threaded memory allocator?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "SunOS" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   [Do we really want to follow the standard? Yes we do!])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Check a little harder for __pthread_mutex_init in the same
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # library, as some systems hide it there until pthread.h is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # defined.  We could alternatively do an AC_TRY_COMPILE with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # pthread.h, but that will work with libpthread really doesn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # exist, like AIX 4.2.  [Bug: 4359]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_CHECK_LIB(pthread, __pthread_mutex_init,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_ok=yes, tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           THREADS_LIBS=" -lpthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_CHECK_LIB(pthreads, pthread_mutex_init,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_ok=yes, tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               THREADS_LIBS=" -lpthreads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_CHECK_LIB(c, pthread_mutex_init,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   tcl_ok=yes, tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_CHECK_LIB(c_r, pthread_mutex_init,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       tcl_ok=yes, tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       # The space is needed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       THREADS_LIBS=" -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TCL_THREADS=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_THREADS=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Do checking message here to not mess up interleaved configure output
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for building with threads])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TCL_THREADS}" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([yes (default)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TCL_THREADS sanity checking.  See if our request for building with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # threads is the same as the way Tcl was built.  If not, warn the user.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *THREADS=1*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "0"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_WARN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    that IS thread-enabled.  It is recommended to use --enable-threads.])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TCL_THREADS}" = "1"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_WARN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    --enable-threads requested, but building against a Tcl that is NOT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread-enabled.  This is an OK configuration that will also run in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    a thread-enabled core.])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ENABLE_SYMBOLS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify if debugging symbols should be used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Memory (TCL_MEM_DEBUG) debugging can also be enabled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set in the Makefile:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          CFLAGS_DEFAULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          LDFLAGS_DEFAULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --enable-symbols
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          Sets to $(LDFLAGS_OPTIMIZE) if false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          DBGX            Formerly used as debug library extension;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          always blank now.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ENABLE_SYMBOLS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dnl TEA specific: Make sure we are initialized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_CONFIG_CFLAGS])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for build with symbols])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(symbols,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-symbols],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [build with debugging symbols (default: off)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [tcl_ok=$enableval], [tcl_ok=no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DBGX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([yes (standard debugging)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" != "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LDFLAGS_DEFAULT="${LDFLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CFLAGS_DEFAULT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(LDFLAGS_DEFAULT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_DBGX)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_ok" = "all"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([enabled symbols mem debugging])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([enabled $tcl_ok debugging])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ENABLE_LANGINFO --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Allows use of modern nl_langinfo check for better l10n.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This is only relevant for Unix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --enable-langinfo=yes|no (default is yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ENABLE_LANGINFO], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(langinfo,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-langinfo],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [langinfo_ok=$enableval], [langinfo_ok=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HAVE_LANGINFO=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$langinfo_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([whether to use nl_langinfo])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$langinfo_ok" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(tcl_cv_langinfo_h, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([$tcl_cv_langinfo_h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test $tcl_cv_langinfo_h = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([$langinfo_ok])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_CONFIG_SYSTEM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Determine what the system is (some things cannot be easily checked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  on a feature-driven basis, alas). This can usually be done via the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  "uname" command.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following var:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  system -        System/platform/version identification code.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_CONFIG_SYSTEM], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_sys_version=windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_sys_version=`uname -s`-`uname -r`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$?" -ne 0 ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_WARN([can't find uname command])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_sys_version=unknown
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "`uname -s`" = "AIX" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    system=$tcl_cv_sys_version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_CONFIG_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Try to determine the proper flags to pass to the compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  for building shared libraries and other such nonsense.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       LDFLAGS -      Flags to pass to the compiler when linking object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       files into an executable application binary such
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       as tclsh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       that tell the run-time dynamic linker where to look
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       for shared libraries such as libtcl.so.  Depends on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       that tell the run-time dynamic linker where to look
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       for shared libraries such as libtcl.so.  Depends on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       the variable LIB_RUNTIME_DIR in the Makefile.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       of a shared library (may request position-independent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       code, among other things).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       SHLIB_LD -      Base command to use for combining object files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       into a shared library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       creating shared libraries.  This symbol typically
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       goes at the end of the "ld" commands that build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       shared libraries. The value of the symbol defaults to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       "${LIBS}" if all of the dependent libraries should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       be specified when creating a shared library.  If
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       dependent libraries should not be specified (as on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       SunOS 4.x, where they cause the link to fail, or in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       general if Tcl and Tk aren't themselves shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       libraries), then this symbol has an empty string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       as its value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       extensions.  An empty string means we don't know how
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       to use shared libraries on this platform.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       in a static or shared library name, using the $PACKAGE_VERSION variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       to put the version in the right place.  This is used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       by platforms that need non-standard library names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       on AIX, since a shared library needs to have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       a .a extension whereas shared objects for loadable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       extensions have a .so extension.  Defaults to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CFLAGS_DEBUG -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                  Flags used when running the compiler in debug mode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CFLAGS_OPTIMIZE -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                  Flags used when running the compiler in optimize mode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_CONFIG_CFLAGS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    dnl TEA specific: Make sure we are initialized
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_INIT])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.a: Enable 64 bit support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([if 64bit support is requested])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(64bit,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-64bit],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [enable 64bit support (default: off)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [do64bit=$enableval], [do64bit=no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([$do64bit])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.b: Enable Solaris 64 bit VIS support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(64bit-vis,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--enable-64bit-vis],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [enable 64bit Sparc VIS support (default: off)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [do64bitVIS=$enableval], [do64bitVIS=no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([$do64bitVIS])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Force 64bit on with VIS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.c: Check if visibility support is available. Do this here so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # that platform specific alternatives can be used below if this fails.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_cv_cc_visibility_hidden, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_LINK([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       extern __attribute__((__visibility__("hidden"))) void f(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_cc_visibility_hidden=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS=$hold_cflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(MODULE_SCOPE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [extern __attribute__((__visibility__("hidden")))],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [Compiler support for module scope symbols])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Step 0.d: Disable -rpath support?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([if rpath support is requested])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_ENABLE(rpath,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_HELP_STRING([--disable-rpath],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [disable rpath support (default: on)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [doRpath=$enableval], [doRpath=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([$doRpath])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: Cross-compiling options for Windows/CE builds?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "${TEA_PLATFORM}" = windows], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([if Windows/CE build is requested])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_ARG_ENABLE(wince,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_HELP_STRING([--enable-wince],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [enable Win/CE support (where applicable)]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [doWince=$enableval], [doWince=no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([$doWince])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Set the variable "system" to hold the name and version number
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # for the system.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_CONFIG_SYSTEM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Require ranlib early so we can override it in special cases below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([AC_PROG_RANLIB])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Set configuration options based on system name and version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is similar to Tcl's unix/tcl.m4 except that we've added a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # "windows" case and removed some core-only vars.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    do64bit_ok=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # default to '{$LIBS}' and set to "" on per-platform necessary basis
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SHLIB_LD_LIBS='${LIBS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # When ld needs options to work in 64-bit mode, put them in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # is disabled by the user. [Bug 1016796]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LDFLAGS_ARCH=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UNSHARED_LIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_LIB_VERSIONS_OK=ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS_DEBUG=-g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_OPTIMIZE=-O2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_WARNING="-Wall"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_OPTIMIZE=-O
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS_WARNING=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_TOOL(AR, ar)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    STLIB_LD='${AR} cr'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   windows)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This is a 2-stage check to make sure we have the 64-bit SDK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We have to know where the SDK is installed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # MACHINE is IX86 for LINK, but this is used by the manifest,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # which requires x86|amd64|ia64.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       MACHINE="X86"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${MSSDK}x" = "xx" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               MSSDK="C:/Progra~1/Microsoft Platform SDK"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PATH64=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "$do64bit" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               amd64|x64|yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   MACHINE="AMD64" ; # default to AMD64 64-bit build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ia64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   MACHINE="IA64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   PATH64="${MSSDK}/Bin/Win64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_WARN([Ensure latest Platform SDK is installed])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit="no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok="yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$GCC" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_PATH_CELIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Set defaults for common evc4/PPC2003 setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Currently Tcl requires 300+, possibly 420+ for sockets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CEVERSION=420;          # could be 211 300 301 400 420 ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ARCH=ARM;               # could be ARM MIPS X86EM ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$doWince" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # If !yes then the user specified something
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # Reset ARCH to allow user to skip specifying it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ARCH=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               eval `echo $doWince | awk -F, '{ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               }'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "x${ARCH}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ARCH=$TARGETCPU;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           OSVERSION=WCE$CEVERSION;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${WCEROOT}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test ! -d "${WCEROOT}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "x${SDKROOT}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SDKROOT="C:/Program Files/Windows CE Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test ! -d "${SDKROOT}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SDKROOT="C:/Windows CE Tools"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               doWince="no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # We could PATH_NOSPACE these, but that's not important,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # as long as we quote them when used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" != "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "${SHARED_BUILD}" = "0" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               runtime=-MT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               runtime=-MD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "x`echo \${VisualStudioVersion}`" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               x1[[4-9]]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   lflags="${lflags} -nodefaultlib:libucrt.lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   TEA_ADD_LIBS([ucrt.lib])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if test "$do64bit" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # All this magic is necessary for the Win64 SDK RC1 - hobbs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC="\"${PATH64}/cl.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="\"${MSSDK}/bin/rc.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="\"${PATH64}/link.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # Avoid 'unresolved external symbol __security_cookie'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               # errors, c.f. http://support.microsoft.com/?id=894573
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               TEA_ADD_LIBS([bufferoverflowU.lib])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           elif test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${TARGETCPU}" = "X86"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC="\"${CEBINROOT}/cl.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC="\"${CEBINROOT}/cl${ARCH}.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Static CE builds require static celib as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   defs="${defs} _DLL"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for i in $defs ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Zi -Od"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -Ox"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="\"${CEBINROOT}/link.exe\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_SUBST(CELIB_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RC="rc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               lflags="${lflags} -nologo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LINKBIN="link"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # mingw gcc mode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_CHECK_TOOL(RC, windres)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_DEBUG="-g"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_CACHE_CHECK(for cross-compile version of gcc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_cross,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_TRY_COMPILE([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           #error cross-compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ], [],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_cross=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_cross=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 if test "$ac_cv_cross" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case "$do64bit" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       amd64|x64|yes)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC="x86_64-w64-mingw32-gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LD="x86_64-w64-mingw32-ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           AR="x86_64-w64-mingw32-ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RANLIB="x86_64-w64-mingw32-ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RC="x86_64-w64-mingw32-windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC="i686-w64-mingw32-gcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LD="i686-w64-mingw32-ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           AR="i686-w64-mingw32-ar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RANLIB="i686-w64-mingw32-ranlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           RC="i686-w64-mingw32-windres"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${LINKBIN} -dll ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # link -lib only works when -lib is the first arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           STLIB_LD="${LINKBIN} -lib ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PATHTYPE=-w
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # For information on what debugtype is most useful, see:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # and also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # This essentially turns it all on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_DEBUG="-debug -debugtype:cv"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS_OPTIMIZE="-release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test "$doWince" != "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_CONSOLE="-link ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AIX-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # AIX requires the _r compiler when gcc isn't being used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "${CC}" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *_r|*_r\ *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # ok ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Make sure only first arg gets _r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_RESULT([Using $CC for compiling with threads])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LIBS="$LIBS -lc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_LIBRARY_PATH_VAR="LIBPATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$do64bit" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_WARN([64bit mode not supported with GCC on $system])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -q64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="-q64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               RANLIB="${RANLIB} -X64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AR="${AR} -X64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD_FLAGS="-b64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "`uname -m`" = ia64], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD='${CC} -shared -Wl,-bexpall'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS="$LDFLAGS -brtl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   BeOS*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -nostart'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #-----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check for inet_ntoa in -lbind, for BeOS (which also needs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # -lsocket, even if the network functions are in -lnet which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # is always linked to, for compatibility.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #-----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   BSD/OS-4.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-export-dynamic -fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CYGWIN_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Haiku*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   HP-UX-*.11.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Use updated header definitions where possible
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: Needed by Tcl, but not most extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "`uname -m`" = ia64], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Use newer C++ library for C++ extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #if test "$GCC" != "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #   CPPFLAGS="-AA"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".sl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$tcl_ok" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-E"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_LIBRARY_PATH_VAR="SHLIB_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -z"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #CFLAGS="$CFLAGS +DAportable"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="+z"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="ld -b"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$do64bit" = "yes"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               case `${CC} -dumpmachine` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   hppa64*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       # 64-bit gcc in use.  Fix flags for GNU ld.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([64bit mode not supported with GCC on $system])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS +DD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="+DD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ]) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   IRIX-6.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -n32 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -mabi=n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -mabi=n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               IRIX-6.3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Use to build 6.2 compatible binaries on 6.3.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CFLAGS="$CFLAGS -n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -n32"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   IRIX64-6.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -n32 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$do64bit" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_WARN([64bit mode not supported by gcc])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_LD="ld -64 -shared -rdata_shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS_ARCH="-64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Linux*|GNU*|NetBSD-Debian)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $do64bit = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS=$hold_cflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test $tcl_cv_cc_m64 = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # The combo of gcc + glibc has a bug related to inlining of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # functions like strtod(). The -fno-builtin flag should address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # this problem but it does not work. The -fno-inline flag is kind
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # of overkill but it works. Disable inlining only when one of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # files in compat/*.c is being linked in.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Lynx*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE=-02
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_FLAGS="-Wl,--export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OpenBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       arch=`arch -s`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vax)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           alpha|sparc64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SHLIB_CFLAGS="-fpic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="-Wl,-export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case "$arch" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vax)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS_OPTIMIZE="-O2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "${TCL_THREADS}" = "1"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # On OpenBSD:   Compile with -pthread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #               Don't link with -lpthread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-lpthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # OpenBSD doesn't do version numbers with dots.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   NetBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # NetBSD has ELF and can use 'cc -shared' to build shared libs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -export-dynamic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "${TCL_THREADS}" = "1"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The -pthread needs to go in the CFLAGS, not LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-pthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   FreeBSD-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This configuration from FreeBSD Ports.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="${CC} -shared"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "${TCL_THREADS}" = "1"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # The -pthread needs to go in the LDFLAGS, not LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-pthread//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       FreeBSD-3.*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Version numbers are dot-stripped by system policy.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TCL_LIB_VERSIONS_OK=nodots
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Darwin-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE="-Os"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fno-common"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # To avoid discrepancies between what headers configure sees during
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # preprocessing tests and compiling tests, move any -isysroot and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS="`echo " ${CFLAGS}" | \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $do64bit = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case `arch` in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ppc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           tcl_cv_cc_arch_ppc64, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               tcl_cv_cc_arch_ppc64=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS=$hold_cflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               i386)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           tcl_cv_cc_arch_x86_64, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       hold_cflags=$CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch x86_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               tcl_cv_cc_arch_x86_64=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS=$hold_cflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -arch x86_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # Check for combined 32-bit and 64-bit fat build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fat_32_64=yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $tcl_cv_ld_single_module = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: link shlib with current and compatibility version flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".dylib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Don't use -prebind when building for Mac OS X 10.4 or later only:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -prebind"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LDFLAGS="$LDFLAGS -headerpad_max_install_names"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_cv_ld_search_paths_first, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   tcl_cv_ld_search_paths_first=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_DEFINE(MODULE_SCOPE, [__private_extern__],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               [Compiler support for module scope symbols])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_cc_visibility_hidden=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # TEA specific: for combined 32 & 64 bit fat builds of Tk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # extensions, verify that 64-bit build is possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval $v'="$hold_'$v'"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       eval $v'="$hold_'$v'"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   done])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # remove 64-bit arch flags from CFLAGS et al. if configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # does not support 64-bit.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               for v in CFLAGS CPPFLAGS LDFLAGS; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               done])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OS/390-*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS_OPTIMIZE=""                # Optimizer is buggy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [Should OS/390 do the right thing with sockets?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OSF1-V*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Digital OSF/1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$SHARED_BUILD" = 1], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='ld -shared -expect_unresolved "*"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='ld -non_shared -expect_unresolved "*"'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $doRpath = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # see pthread_intro(3) for pthread support on osf1, k.furukawa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "${TCL_THREADS}" = 1], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LIBS=`echo $LIBS | sed s/-lpthreads//`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LIBS="$LIBS -lpthread -lmach -lexc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               CFLAGS="$CFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               LDFLAGS="$LDFLAGS -pthread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   QNX-6*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # QNX RTP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # This may work for all QNX, but it was only reported for v6.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -Bshareable -x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SCO_SV-3.2*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="-fPIC -melf"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_CFLAGS="-Kpic -belf"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD="ld -G"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SunOS-5.[[0-6]])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Careful to not let 5.10+ fall into this case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Note: If _REENTRANT isn't defined, then Solaris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # won't define thread-safe library routines.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [Do we really want to follow the standard? Yes we do!])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SunOS-5*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Note: If _REENTRANT isn't defined, then Solaris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # won't define thread-safe library routines.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [Do we really want to follow the standard? Yes we do!])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check to enable 64-bit flags for compiler/linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$do64bit" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           arch=`isainfo`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$arch" = "sparcv9 sparc"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -m64 -mcpu=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SHLIB_CFLAGS="-fPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   AS_IF([test "$do64bitVIS" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -xarch=v9a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS_ARCH="-xarch=v9a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       CFLAGS="$CFLAGS -xarch=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       LDFLAGS_ARCH="-xarch=v9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # Solaris 64 uses this as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [AS_IF([test "$arch" = "amd64 i386"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -m64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   do64bit_ok=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -m64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -m64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           CFLAGS="$CFLAGS -xarch=amd64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           LDFLAGS="$LDFLAGS -xarch=amd64";;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD='${CC} -shared'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AS_IF([test "$do64bit_ok" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AS_IF([test "$arch" = "sparcv9 sparc"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # We need to specify -static-libgcc or we need to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # add the path to the sparv9 libgcc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # JH: static-libgcc is necessary for core Tcl, but may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # not be necessary for extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # for finding sparcv9 libgcc, get the regular libgcc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # path, remove so name and append 'sparcv9'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ], [AS_IF([test "$arch" = "amd64 i386"], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # JH: static-libgcc is necessary for core Tcl, but may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # not be necessary for extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               SunOS-5.[[1-9]][[0-9]]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   UNIX_SV* | UnixWare-5*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_CFLAGS="-KPIC"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD='${CC} -G'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_SUFFIX=".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # that don't grok the -Bexport option.  Test that it does.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           hold_ldflags=$LDFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS=$hold_ldflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AS_IF([test $tcl_cv_ld_Bexport = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LDFLAGS="$LDFLAGS -Wl,-Bexport"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CC_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LD_SEARCH_FLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl # until the end of configure, as configure's compile and link tests use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dnl # preprocessing tests use only CPPFLAGS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Add in the arch flags late to ensure it wasn't removed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Not necessary in TEA, but this is aligned with core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If we're running gcc, then change the C flags for compiling shared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # libraries to the right flags for gcc, instead of those for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # standard manufacturer compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$GCC" = yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AIX-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       BSD/OS*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGWIN_*|MINGW32_*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       IRIX*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       Darwin-*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SCO_SV-3.2*) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       windows) ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *) SHLIB_CFLAGS="-fPIC" ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(MODULE_SCOPE, [extern],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [No Compiler support for module scope symbols])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: use PACKAGE_VERSION instead of VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK(for SEH support in compiler,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_seh,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       int main(int argc, char** argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int a, b = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           __try {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               a = 666 / b;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           __except (EXCEPTION_EXECUTE_HANDLER) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_seh=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_seh=no,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_seh=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_seh" = "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_NO_SEH, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               [Defined when mingw does not support SEH])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check to see if the excpt.h include file provided contains the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # definition for EXCEPTION_DISPOSITION; if not, which is the case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # with Cygwin's version as of 2002-04-10, define it to be int,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # sufficient for getting the current code to work.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_eh_disposition,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ],[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXCEPTION_DISPOSITION x;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_eh_disposition=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_eh_disposition=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_eh_disposition" = "no" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(EXCEPTION_DISPOSITION, int,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check to see if winnt.h defines CHAR, SHORT, and LONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # even if VOID has already been #defined. The win32api
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # used by mingw and cygwin is known to do this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK(for winnt.h that ignores VOID define,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_winnt_ignore_void,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define VOID void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#undef WIN32_LEAN_AND_MEAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           CHAR c;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHORT s;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           LONG l;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tcl_cv_winnt_ignore_void=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        tcl_cv_winnt_ignore_void=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               [Defined when cygwin/mingw ignores VOID define in winnt.h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if the compiler supports casting to a union type.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This is used to stop gcc from printing a compiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # warning when initializing a union member.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK(for cast to union support,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_cast_to_union,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             union foo { int i; double d; };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             union foo f = (union foo) (int) 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_cast_to_union=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_cast_to_union=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_cast_to_union" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_CAST_TO_UNION, 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               [Defined when compiler supports casting to union type.])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CFLAGS_DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CFLAGS_OPTIMIZE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CFLAGS_WARNING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(STLIB_LD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(SHLIB_LD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(SHLIB_LD_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(SHLIB_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(LD_LIBRARY_PATH_VAR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # These must be called after we do the basic CFLAGS checks and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # verify any possible 64-bit or similar switches are necessary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_TCL_EARLY_FLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_TCL_64BIT_FLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_SERIAL_PORT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Determine which interface to use to talk to the serial port.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Note that #include lines must begin in leftmost column for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  some compilers to recognize them as preprocessor directives,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  and some build environments have stdin not pointing at a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  pseudo-terminal (usually /dev/null instead.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines only one of the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_SYS_MODEM_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          USE_TERMIOS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          USE_TERMIO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          USE_SGTTY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_SERIAL_PORT], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADERS(sys/modem.h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <termios.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct termios t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tcgetattr(0, &t) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cfsetospeed(&t, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_api_serial = no ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <termio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct termio t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ioctl(0, TCGETA, &t) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_api_serial = no ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sgtty.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct sgttyb t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ioctl(0, TIOCGETP, &t) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.sg_ospeed = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.sg_flags |= ODDP | EVENP | RAW;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_api_serial = no ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <termios.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct termios t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (tcgetattr(0, &t) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   cfsetospeed(&t, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_api_serial = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <termio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct termio t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ioctl(0, TCGETA, &t) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_api_serial = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sgtty.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct sgttyb t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (ioctl(0, TIOCGETP, &t) == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.sg_ospeed = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   t.sg_flags |= ODDP | EVENP | RAW;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $tcl_cv_api_serial in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_MISSING_POSIX_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Supply substitutes for missing POSIX header files.  Special
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  notes:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      - stdlib.h doesn't define strtol, strtoul, or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        strtod in some versions of SunOS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      - some versions of string.h don't declare procedures such
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#        as strstr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines some of the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_DIRENT_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_ERRNO_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_VALUES_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_LIMITS_H or NO_LIMITS_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_STDLIB_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_STRING_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_SYS_WAIT_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          NO_DLFCN_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_SYS_PARAM_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_STRING_H ?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# CHECK on limits.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_TRY_LINK([#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dirent.h>], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef _POSIX_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   ifdef __Lynx__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Generate compilation error to make the test fail:  Lynx headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * are only valid if really in the POSIX environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   missing_procedure();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DIR *d;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct dirent *entryPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-char *p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-d = opendir("foobar");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-entryPtr = readdir(d);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-p = entryPtr->d_name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-closedir(d);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_dirent_h = no; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(limits.h,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_ok = 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # See also memmove check below for a place where NO_STRING_H can be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # set and why.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_ok = 0; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_HAVE_HEADERS(sys/param.h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PATH_X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the X11 header files and the X11 library archive.  Try
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the ac_path_x macro first, but if it doesn't find the X stuff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  (e.g. because there's no xmkmf program) then check through
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  a list of possible directories.  Under some conditions the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  autoconf macro will return an include directory that contains
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  no include files, so double-check its result just to be safe.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This should be called after TEA_CONFIG_CFLAGS as setting the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  LIBS line can confuse some configure macro magic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          XINCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          XLIBSW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_LIBS (appends to)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_X], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_PATH_UNIX_X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_UNIX_X], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_PATH_X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    not_really_there=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$no_x" = ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$x_includes" = ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test ! -r $x_includes/X11/Xlib.h; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           not_really_there="yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for X11 header files])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   found_xincludes="no"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$found_xincludes" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for i in $dirs ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -r $i/X11/Xlib.h; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_RESULT([$i])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               XINCLUDES=" -I$i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               found_xincludes="yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$x_includes" != ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       XINCLUDES="-I$x_includes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       found_xincludes="yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$found_xincludes" = "no"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([couldn't find any!])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$no_x" = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for X11 libraries])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   XLIBSW=nope
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   for i in $dirs ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_RESULT([$i])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           XLIBSW="-L$i -lX11"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           x_libraries="$i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$x_libraries" = ""; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       XLIBSW=-lX11
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       XLIBSW="-L$x_libraries -lX11"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$XLIBSW" = nope ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$XLIBSW" = nope ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([could not find any!  Using -lX11.])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   XLIBSW=-lX11
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${XLIBSW}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_BLOCKING_STYLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  The statements below check for systems where POSIX-style
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  On these systems (mostly older ones), use the old BSD-style
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  FIONBIO approach instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines some of the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_SYS_IOCTL_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_SYS_FILIO_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          USE_FIONBIO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          O_NONBLOCK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_BLOCKING_STYLE], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADERS(sys/ioctl.h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADERS(sys/filio.h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_CONFIG_SYSTEM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case $system in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   OSF*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([FIONBIO])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([O_NONBLOCK])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_TIME_HANDLER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Checks how the system deals with time.h, what time structures
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  are used on the system, and what fields the structures have.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines some of the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          USE_DELTA_FOR_TZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_TM_GMTOFF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_TM_TZADJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_TIMEZONE_VAR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_TIME_HANDLER], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADERS(sys/time.h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_HEADER_TIME
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_STRUCT_TIMEZONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_FUNCS(gmtime_r localtime_r)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_member_tm_tzadj = yes ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_member_tm_gmtoff = yes ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Its important to include time.h in this check, as some systems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # (like convex) have timezone functions, etc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_COMPILE([#include <time.h>],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [extern long timezone;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       timezone += 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exit (0);],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test $tcl_cv_timezone_long = yes ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([#include <time.h>],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [extern time_t timezone;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           timezone += 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           exit (0);],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test $tcl_cv_timezone_time = yes ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_BUGGY_STRTOD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Under Solaris 2.4, strtod returns the wrong value for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  terminating character under some conditions.  Check for this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  and if the problem exists use a substitute procedure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  "fixstrtod" (provided by Tcl) that corrects the error.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Also, on Compaq's Tru64 Unix 5.0,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  strtod(" ") returns 0.0 instead of a failure to convert.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Might defines some of the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          strtod (=fixstrtod)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_BUGGY_STRTOD], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_strtod" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_RUN([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           #include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           extern double strtod();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int main() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               char *infString="Inf", *nanString="NaN", *spaceString=" ";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               char *term;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               double value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               value = strtod(infString, &term);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if ((term != infString) && (term[-1] == 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               value = strtod(nanString, &term);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if ((term != nanString) && (term[-1] == 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               value = strtod(spaceString, &term);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if (term == (spaceString+1)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   exit(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               exit(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               tcl_cv_strtod_buggy=buggy)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$tcl_cv_strtod_buggy" = buggy; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_LIBOBJ([fixstrtod])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       USE_COMPAT=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_TCL_LINK_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Search for the libraries needed to link the Tcl shell.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Things like the math library (-lm) and socket stuff (-lsocket vs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  -lnsl) are dealt with here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set in the Makefile:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          DL_LIBS (not in TEA, only needed in core)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          MATH_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          MATH_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Might append to the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Might define the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_NET_ERRNO_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_TCL_LINK_LIBS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # On a few very rare systems, all of the libm.a stuff is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # already in libc.a.  Set compiler flags accordingly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Also, Linux requires the "ieee" library for math to work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # right (and it must appear before "-lm").
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Interactive UNIX requires -linet instead of -lsocket, plus it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # needs net/errno.h to define the socket-related error codes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_HEADER(net/errno.h, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      Check for the existence of the -lsocket and -lnsl libraries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      The order here is important, so that they end up in the right
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      order in the command line generated by make.  Here are some
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      special considerations:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      1. Use "connect" and "accept" to check for -lsocket, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         "gethostbyname" to check for -lnsl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      2. Use each function name only once:  can't redo a check because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         autoconf caches the results of the last check and won't redo it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      3. Use -lnsl and -lsocket only if they supply procedures that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         aren't already present in the normal libraries.  This is because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         IRIX 5.2 has libraries, but they aren't needed and they're
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         bogus:  they goof up name resolution if used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #      4. On some SVR4 systems, can't use -lsocket without -lnsl too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         To get around this problem, check for both libraries together
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #         if -lsocket doesn't work by itself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tcl_checkBoth=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_checkSocket" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "$tcl_checkBoth" = 1; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tk_oldLibs=$LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   LIBS="$LIBS -lsocket -lnsl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [LIBS="$LIBS -lnsl"])])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA specific: Don't perform the eval of the libraries here because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MATH_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_TCL_EARLY_FLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Check for what flags are needed to be passed so the correct OS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  features are available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Might define the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          _ISOC99_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          _LARGEFILE64_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          _LARGEFILE_SOURCE64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_TCL_EARLY_FLAG],[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([[#define ]$1[ 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-]$2], $3,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_flags="$tcl_flags $1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for required early compiler flags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tcl_flags=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [char *p = (char *)strtoll; char *q = (char *)strtoull;])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [struct stat64 buf; int i = stat64("/", &buf);])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   [char *p = (char *)open64;])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${tcl_flags}" = "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([none])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${tcl_flags}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_TCL_64BIT_FLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Check for what is defined in the way of 64-bit features.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Might define the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_WIDE_INT_IS_LONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_WIDE_INT_TYPE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_STRUCT_DIRENT64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_STRUCT_STAT64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          HAVE_TYPE_OFF64_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for 64-bit integer type])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL(tcl_cv_type_64bit,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tcl_cv_type_64bit=none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if the compiler knows natively about __int64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_type_64bit=__int64, tcl_type_64bit="long long")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # See if we should use long anyway  Note that we substitute in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # type that is our current guess for a 64-bit type inside this check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # program, so it should be modified only carefully...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_TRY_COMPILE(,[switch (0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }],tcl_cv_type_64bit=${tcl_type_64bit})])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${tcl_cv_type_64bit}" = none ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([using long])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "${tcl_cv_type_64bit}" = "__int64" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -a "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # TEA specific: We actually want to use the default tcl.h checks in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([using Tcl header defaults])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [What type should be used to define wide integers?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${tcl_cv_type_64bit}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Now check for auxiliary declarations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <dirent.h>],[struct dirent64 p;],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CHECK_FUNCS(open64 lseek64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for off64_t])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(tcl_cv_type_off64_t,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   dnl functions lseek64 and open64 are defined.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "x${tcl_cv_type_off64_t}" = "xyes" && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           test "x${ac_cv_func_lseek64}" = "xyes" && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           test "x${ac_cv_func_open64}" = "xyes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([yes])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([no])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## Here ends the standard Tcl configuration bits and starts the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-## TEA specific functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_INIT --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Init various Tcl Extension Architecture (TEA) variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This should be the first called TEA_* macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          CYGPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          EXEEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines only:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TEA_VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TEA_INITED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TEA_PLATFORM (windows or unix)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# "cygpath" is used on windows to generate native path names for include
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# files. These variables should only be used with the compiler and linker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# since they generate native path names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EXEEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Select the executable extension based on the host type.  This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  is a lightweight replacement for AC_EXEEXT that doesn't require
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  a compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_INIT], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # TEA extensions pass this us the version of TEA they think they
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # are compatible with.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TEA_VERSION="3.9"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for correct TEA configuration])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${PACKAGE_NAME}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_ERROR([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The PACKAGE_NAME variable must be defined by your TEA configure.ac])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"$1" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_ERROR([
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TEA version not specified.])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "$1" != "${TEA_VERSION}" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the user did not set CFLAGS, set it now to keep macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${CFLAGS+set}" != "set" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    case "`uname -s`" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *win32*|*WIN32*|*MINGW32_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *CYGWIN_*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CYGPATH=echo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Maybe we are cross-compiling....
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case ${host_alias} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *mingw32*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXEEXT=".exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_PLATFORM="windows"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           EXEEXT=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           TEA_PLATFORM="unix"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check if exec_prefix is set. If not use fall back to prefix.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Note when adjusted, so that TEA_PREFIX can correct for this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This is needed for recursive configures, since autoconf propagates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # $prefix, but not $exec_prefix (doh!).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x$exec_prefix = xNONE ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exec_prefix_default=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exec_prefix=$prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(EXEEXT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(CYGPATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This package name must be replaced statically for AC_SUBST to work
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Substitute STUB_LIB_FILE in case package creates a stub library too.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # We AC_SUBST these here to ensure they are subst'ed,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in case the user doesn't call TEA_ADD_...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_STUB_SOURCES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_STUB_OBJECTS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_TCL_SOURCES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_HEADERS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_SOURCES --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more source files.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  It is not important to specify the directory, as long as it is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  in the generic, win or unix subdirectory of $(srcdir).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_SOURCES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_OBJECTS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_SOURCES], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case $i in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [\$]*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # allow $-var names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # To add more dirs here (like 'src'), you have to update VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # in Makefile.in as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([could not find source file '$i'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_SOURCES="$PKG_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_OBJECTS="$PKG_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_SOURCES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_OBJECTS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_STUB_SOURCES --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more source files.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  It is not important to specify the directory, as long as it is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  in the generic, win or unix subdirectory of $(srcdir).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_STUB_SOURCES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_STUB_OBJECTS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_STUB_SOURCES], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence - allows for generic/win/unix VPATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       -a ! -f "${srcdir}/macosx/$i" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([could not find stub source file '$i'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # this assumes it is in a VPATH dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   i=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # handle user calling this before or after TEA_SETUP_COMPILER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${OBJEXT}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_STUB_SOURCES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_STUB_OBJECTS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_TCL_SOURCES --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more Tcl source files.  These should be platform
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  independent runtime files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_TCL_SOURCES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_TCL_SOURCES], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence, be strict because it is installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_TCL_SOURCES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_HEADERS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more source headers.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # check for existence, be strict because it is installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -f "${srcdir}/$i" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_HEADERS="$PKG_HEADERS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_HEADERS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_INCLUDES --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more include dirs.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_INCLUDES], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_INCLUDES="$PKG_INCLUDES $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_LIBS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more libraries.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.  For Windows,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  libraries provided in "foo.lib" format will be converted to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  "-lfoo" when using GCC (mingw).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_LIBS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vars="$@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in $vars; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   PKG_LIBS="$PKG_LIBS $i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_LIBS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_CFLAGS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more CFLAGS.  Users should check for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the right platform before adding to their list.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines and substs the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          PKG_CFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_CFLAGS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PKG_CFLAGS="$PKG_CFLAGS $@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PKG_CFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_ADD_CLEANFILES --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Specify one or more CLEANFILES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  one or more file names to clean target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_ADD_CLEANFILES], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CLEANFILES="$CLEANFILES $@"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PREFIX --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Handle the --prefix=... option by defaulting to what Tcl gave
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  If --prefix or --exec-prefix was not specified, $prefix and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  $exec_prefix will be set to the values given to Tcl when it was
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  configured.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PREFIX], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${prefix}" = "NONE"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   prefix_default=yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${TCL_PREFIX}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       prefix=${TCL_PREFIX}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_NOTICE([--prefix defaulting to /usr/local])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       prefix=/usr/local
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -o x"${exec_prefix_default}" = x"yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${TCL_EXEC_PREFIX}" != x; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exec_prefix=${TCL_EXEC_PREFIX}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exec_prefix=$prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_SETUP_COMPILER_CC --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Do compiler checks the way we want.  This is just a replacement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  for AC_PROG_CC in TEA configure.ac files to make them cleaner.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets up CC var and other standard bits we need to make executables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_SETUP_COMPILER_CC], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_PROG_CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_PROG_CPP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_DATA='${INSTALL} -m 644'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_PROGRAM='${INSTALL}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_SCRIPT='${INSTALL}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INSTALL_LIBRARY='${INSTALL_DATA}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL_DATA_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL_DATA)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL_PROGRAM)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL_SCRIPT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(INSTALL_LIBRARY)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Checks to see if the make program sets the $MAKE variable.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_PROG_MAKE_SET
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Find ranlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CHECK_TOOL(RANLIB, ranlib)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Determines the correct binary file extension (.o, .obj, .exe etc.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_OBJEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_EXEEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_SETUP_COMPILER --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Do compiler checks that use the compiler.  This must go after
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TEA_SETUP_COMPILER_CC, which does the actual compiler check.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Sets up CC var and other standard bits we need to make executables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_SETUP_COMPILER], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # It makes compiling go faster.  (This is only a performance feature.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -z "$no_pipe" -a -n "$GCC"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_CHECK([if the compiler understands -pipe],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tcl_cv_cc_pipe, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS=$hold_cflags])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test $tcl_cv_cc_pipe = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CFLAGS="$CFLAGS -pipe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Common compiler flag setup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_C_BIGENDIAN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "unix" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_TCL_LINK_LIBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_MISSING_POSIX_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Let the user call this, because if it triggers, they will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # need a compat/strtod.c that is correct.  Users can also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # use Tcl_GetDouble(FromObj) instead.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #TEA_BUGGY_STRTOD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_MAKE_LIB --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Generate a line that can be used to build a shared/unshared library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  in a platform independent manner.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CFLAGS -        Done late here to note disturb other AC macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       MAKE_LIB -      Command to execute to build the Tcl library;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       differs depending on whether or not Tcl is being
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                       compiled as a shared library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  MAKE_SHARED_LIB Makefile rule for building a shared library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  MAKE_STATIC_LIB Makefile rule for building a static library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  MAKE_STUB_LIB   Makefile rule for building a stub library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_MAKE_LIB], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_EGREP_CPP([manifest needed], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(_MSC_VER) && _MSC_VER >= 1400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-print("manifest needed")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Could do a CHECK_PROG for mt, but should always be with MSVC8+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TEA_ADD_CLEANFILES([*.manifest])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_LIB="${MAKE_SHARED_LIB} "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   MAKE_LIB="${MAKE_STATIC_LIB} "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Shared libraries and static libraries have different names.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Use the double eval to make sure any variables in the suffix is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # substituted. (@@@ Might not be necessary anymore)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # We force the unresolved linking of symbols that are really in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # the private libraries of Tcl and Tk.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${TK_BIN_DIR}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           PKG_LIB_FILE=lib${PKG_LIB_FILE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Some packages build their own stubs libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # These aren't needed on Windows (either MSVC or gcc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB_STUB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RANLIB_STUB="${RANLIB}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${TK_BIN_DIR}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       RANLIB=:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Some packages build their own stubs libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # These are escaped so that only CFLAGS is picked up at configure time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # The other values will be substituted at make time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${SHARED_BUILD}" = "1" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MAKE_LIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MAKE_SHARED_LIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MAKE_STATIC_LIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MAKE_STUB_LIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(RANLIB_STUB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(VC_MANIFEST_EMBED_DLL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(VC_MANIFEST_EMBED_EXE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_LIB_SPEC --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Compute the name of an existing object library located in libdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  from the given base name and produce the appropriate linker flags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  basename        The base name of the library without version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                  numbers, extensions, or "lib" prefixes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  extra_dir       Extra directory in which to search for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                  library.  This location is used first, then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                  $prefix/$exec-prefix, then some defaults.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TEA_INIT and TEA_PREFIX must be called first.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          ${basename}_LIB_NAME    The computed library name.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          ${basename}_LIB_SPEC    The computed linker flags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_LIB_SPEC], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for $1 library])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Look in exec-prefix for the library (defined by TEA_PREFIX).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    tea_lib_name_dir="${exec_prefix}/lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Or in a user-specified location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"$2" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tea_extra_lib_dir=$2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tea_extra_lib_dir=NONE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test -f "$i" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       tea_lib_name_dir=`dirname $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $1_LIB_NAME=`basename $i`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $1_LIB_PATH_NAME=$i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Strip off the leading "lib" and trailing ".a" or ".so"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${$1_LIB_NAME}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_ERROR([not found])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${$1_LIB_SPEC}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PRIVATE_TCL_HEADERS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the private Tcl include files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          already been called.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_TOP_DIR_NATIVE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for Tcl private include files])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check to see if tcl<Plat>Port.h isn't already with the public headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't look for tclInt.h because that resides with tcl.h in the core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # sources, but the <plat>Port headers are in a different directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -f "${ac_cv_c_tclh}/tclWinPort.h"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result="private headers found with public headers"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "${TEA_PLATFORM}" = "unix" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result="private headers found with public headers"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Overwrite the previous TCL_INCLUDES as this should capture both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # public and private headers in the same set.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # We want to ensure these are substituted so as not to require
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # any *_NATIVE vars be defined in the Makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # If Tcl was built as a framework, attempt to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # the framework's Headers and PrivateHeaders directories
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *TCL_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -d "${TCL_BIN_DIR}/Headers" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       -d "${TCL_BIN_DIR}/PrivateHeaders"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       result="Using ${TCL_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_TOP_DIR_NATIVE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([${result}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PUBLIC_TCL_HEADERS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the installed public Tcl header files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CYGPATH must be set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds a --with-tclinclude switch to configure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Result is cached.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TCL_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for Tcl public headers])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL(ac_cv_c_tclh, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Use the value from --with-tclinclude, if it was given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${with_tclinclude}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${with_tclinclude}/tcl.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ac_cv_c_tclh=${with_tclinclude}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # If Tcl was built as a framework, attempt to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # the framework's Headers directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case ${TCL_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *TCL_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Look in the source dir only if Tcl is not installed,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # and in that situation, look there before installed locations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${TCL_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check order: pkg --prefix location, Tcl's --prefix location,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # relative to directory of tclConfig.sh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval "temp_includedir=${includedir}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list="$list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${temp_includedir}        2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list /usr/local/include /usr/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${TCL_INCLUDE_SPEC}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               list="$list `ls -d ${d} 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "$i/tcl.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tclh=$i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Print a message based on how we determined the include path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${ac_cv_c_tclh}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${ac_cv_c_tclh}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Convert to a native path and substitute into the output files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TCL_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PRIVATE_TK_HEADERS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the private Tk include files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                           already been called.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for Tk private include files])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Check to see if tk<Plat>Port.h isn't already with the public headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Don't look for tkInt.h because that resides with tk.h in the core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # sources, but the <plat>Port headers are in a different directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_PLATFORM}" = "windows" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -f "${ac_cv_c_tkh}/tkWinPort.h"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result="private headers found with public headers"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    elif test "${TEA_PLATFORM}" = "unix" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result="private headers found with public headers"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Overwrite the previous TK_INCLUDES as this should capture both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # public and private headers in the same set.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # We want to ensure these are substituted so as not to require
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # any *_NATIVE vars be defined in the Makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Detect and add ttk subdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test -d "${TK_SRC_DIR}/generic/ttk"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-      TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # If Tk was built as a framework, attempt to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # the framework's Headers and PrivateHeaders directories
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       case ${TK_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *TK_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test -d "${TK_BIN_DIR}/Headers" -a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           -d "${TK_BIN_DIR}/PrivateHeaders"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       result="Using ${TK_INCLUDES}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_TOP_DIR_NATIVE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_XLIB_DIR_NATIVE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_RESULT([${result}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PUBLIC_TK_HEADERS --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the installed public Tk header files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  None.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Requires:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CYGPATH must be set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds a --with-tkinclude switch to configure.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Result is cached.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          TK_INCLUDES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for Tk public headers])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_CACHE_VAL(ac_cv_c_tkh, [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Use the value from --with-tkinclude, if it was given
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${with_tkinclude}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${with_tkinclude}/tk.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ac_cv_c_tkh=${with_tkinclude}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "`uname -s`" = "Darwin"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # If Tk was built as a framework, attempt to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           # the framework's Headers directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case ${TK_DEFS} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *TK_FRAMEWORK*)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Look in the source dir only if Tk is not installed,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # and in that situation, look there before installed locations.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test -f "${TK_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # Check order: pkg --prefix location, Tk's --prefix location,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # relative to directory of tkConfig.sh, Tcl's --prefix location,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # relative to directory of tclConfig.sh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       eval "temp_includedir=${includedir}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list="$list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${temp_includedir}        2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TK_PREFIX}/include      2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list="$list /usr/local/include /usr/include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test x"${TK_INCLUDE_SPEC}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               list="$list `ls -d ${d} 2>/dev/null`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for i in $list ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "$i/tk.h" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_tkh=$i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Print a message based on how we determined the include path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${ac_cv_c_tkh}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${ac_cv_c_tkh}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Convert to a native path and substitute into the output files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(TK_INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # On Windows and Aqua, we need the X compat headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for X11 header files])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_SUBST(TK_XINCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PATH_CONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate the ${1}Config.sh file and perform a sanity check on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  the ${1} compile flags.  These are used by packages like
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  [incr Tk] that load *Config.sh files from more than Tcl and Tk.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --with-$1=...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1_BIN_DIR      Full path to the directory containing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          the $1Config.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_CONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Ok, lets find the $1 configuration
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-$1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_$1}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_$1 in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_$1=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for $1 configuration])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(ac_cv_c_$1config,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-$1 was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_$1config}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           case ${with_$1config} in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               */$1Config.sh )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if test -f ${with_$1config}; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   fi;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -f "${with_$1config}/$1Config.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a private $1 installation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_$1config}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../$1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../$1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../../$1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../$1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/$1Config.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_$1config=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/unix/$1Config.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_$1config=`(cd $i/unix; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # check in a few common install locations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_$1config}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in `ls -d ${libdir} 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${exec_prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d ${prefix}/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/local/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/contrib/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -d /usr/lib64 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -f "$i/$1Config.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_$1config=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_$1config}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $1_BIN_DIR="# no $1 configs found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_WARN([Cannot find $1 configuration definitions])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_$1=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       $1_BIN_DIR=${ac_cv_c_$1config}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_LOAD_CONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Load the $1Config.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1_BIN_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1_SRC_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1_LIB_FILE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1_LIB_SPEC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_LOAD_CONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([loading])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   . "${$1_BIN_DIR}/$1Config.sh"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        AC_MSG_RESULT([file not found])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # If the $1_BIN_DIR is the build directory (not the install directory),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # then set the common variable name to the value of the build variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # For example, the variable $1_LIB_SPEC will be set to the value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # instead of $1_BUILD_LIB_SPEC since it will work with both an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # installed and uninstalled version of Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test -f "${$1_BIN_DIR}/Makefile" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_WARN([Found Makefile - using build library specs for $1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_BIN_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_SRC_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_STUB_LIB_FILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_STUB_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_STUB_LIB_PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Allow the caller to prevent this auto-check by specifying any 2nd arg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AS_IF([test "x$2" = x], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Check both upper and lower-case variants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # If a dev wanted non-stubs libs, this function could take an option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # to not use _STUB in the paths below
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       [TEA_LOAD_CONFIG_LIB($1_STUB)])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_LOAD_CONFIG_LIB --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Helper function to load correct library from another extension's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  ${PACKAGE}Config.sh.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds to LIBS the appropriate extension library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_MSG_CHECKING([For $1 library for LIBS])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # This simplifies the use of stub libraries by automatically adding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "x${$1_LIB_SPEC}" != "x" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TEA_ADD_LIBS([${$1_LIB_SPEC}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_RESULT([file not found])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_EXPORT_CONFIG --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Define the data to insert into the ${PACKAGE}Config.sh file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Requires the following vars to be set:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Substitutes the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_EXPORT_CONFIG], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # These are for $1Config.sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_BUILD_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_STUB_LIB_SPEC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_BUILD_STUB_LIB_PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST($1_STUB_LIB_PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MAJOR_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(MINOR_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    AC_SUBST(PATCHLEVEL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TEA_PATH_CELIB --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Locate Keuchel's celib emulation layer for targeting Win/CE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Arguments:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Results:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Adds the following arguments to configure:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          --with-celib=...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Defines the following vars:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          CELIB_DIR       Full path to the directory containing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                          the include and platform lib files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-AC_DEFUN([TEA_PATH_CELIB], [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # First, look for one uninstalled.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the alternative search directory is invoked by --with-celib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if test x"${no_celib}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # we reset no_celib in case something fails here
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   no_celib=true
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_MSG_CHECKING([for Windows/CE celib directory])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   AC_CACHE_VAL(ac_cv_c_celibconfig,[
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # First check to see if --with-celibconfig was specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${with_celibconfig}" != x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if test -d "${with_celibconfig}/inc" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       # then check for a celib library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if test x"${ac_cv_c_celibconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for i in \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ../../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../celib-palm-3.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ${srcdir}/../celib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               if test -d "$i/inc" ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   ac_cv_c_celibconfig=`(cd $i; pwd)`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   ])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if test x"${ac_cv_c_celibconfig}" = x ; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_ERROR([Cannot find celib support library directory])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       no_celib=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CELIB_DIR=${ac_cv_c_celibconfig}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       AC_MSG_RESULT([found $CELIB_DIR])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Local Variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mode: autoconf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tests/all.tcl b/vendor/thread2.7.3/tests/all.tcl
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 74aca9794..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tests/all.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,59 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# all.tcl --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This file contains a top-level script to run all of the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# tests.  Execute it by invoking "source all.test" when running tcltest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# in this directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1998-1999 by Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# All rights reserved.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require tcltest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-::tcltest::loadTestedCommands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set ::tcltest::testSingleFile false
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set ::tcltest::testsDirectory [file dir [info script]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We need to ensure that the testsDirectory is absolute
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-::tcltest::normalizePath ::tcltest::testsDirectory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "Tcl $tcl_patchLevel tests running in interp:  [info nameofexecutable]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "Tests running in working dir:  $::tcltest::testsDirectory"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[llength $::tcltest::skip] > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stdout "Skipping tests that match:  $::tcltest::skip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[llength $::tcltest::match] > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stdout "Only running tests that match:  $::tcltest::match"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[llength $::tcltest::skipFiles] > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stdout "Skipping test files that match:  $::tcltest::skipFiles"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[llength $::tcltest::matchFiles] > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stdout "Only sourcing test files that match:  $::tcltest::matchFiles"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set timeCmd {clock format [clock seconds]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "Tests began at [eval $timeCmd]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# These tests need to know which is the main thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set ::tcltest::mainThread [thread::id]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "Thread [package provide Thread]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "Mainthread id is $::tcltest::mainThread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Source each of the specified tests
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-foreach file [lsort [::tcltest::getMatchingFiles]] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tail [file tail $file]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts stdout $tail
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {source $file} msg]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts stdout $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Cleanup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-puts stdout "\nTests ended at [eval $timeCmd]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-::tcltest::cleanupTests 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tests/thread.test b/vendor/thread2.7.3/tests/thread.test
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c41867c55..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tests/thread.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,1164 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Commands covered:  thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This file contains a collection of tests for one or more of the Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# built-in commands.  Sourcing this file into Tcl runs the tests and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# generates output for errors.  No output means no errors were found.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1996 Sun Microsystems, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1998-2000 Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2002 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require tcltest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace import ::tcltest::*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcltest::loadTestedCommands
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-package require Thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcltest::testConstraint chanTransfer               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    [expr {   $::tcl_platform(platform) == "unix"  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           || $::tcl_patchLevel > "8.4.10"}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set dummy [makeFile dummyForTransfer dummyForTransfer]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set tcltest::mainThread [thread::id]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc ThreadReap {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while {[llength [thread::names]] > 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach tid [thread::names] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$tid != $::tcltest::mainThread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                catch {thread::release -wait $tid}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    llength [thread::names]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-2.0 {no global thread command} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    info commands thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-2.84 {thread subcommands} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cmds [info commands thread::*]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set idx [lsearch -exact $cmds ::thread::cancel]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lsort [lreplace $cmds $idx $idx]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {::thread::attach ::thread::broadcast ::thread::cond ::thread::configure ::thread::create ::thread::detach ::thread::errorproc ::thread::eval ::thread::exists ::thread::exit ::thread::id ::thread::join ::thread::mutex ::thread::names ::thread::preserve ::thread::release ::thread::rwmutex ::thread::send ::thread::transfer ::thread::unwind ::thread::wait}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-3.0 {thread::names initial thread list} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list [ThreadReap] [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.0 {thread::create: create server thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {2}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.1 {thread::create: create one shot thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::create {set x 5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach try {0 1 2 4 5 6} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Try various ways to yield
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$l == 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.2 {thread::create - create preservable thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create -preserved]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::preserve $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::release -wait $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {2}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.3 {thread::create - release a thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {thread::release}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.4 {thread::create - create joinable thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create -joinable {set x 5}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::join $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-4.5 {thread::create - join detached thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {after 1000 ; thread::release}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {set res [thread::join $tid]} msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lrange $msg 0 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {cannot join thread}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-5.0 {thread::release} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {thread::release}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-6.0 {thread::unwind - simple unwind} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::create {thread::unwind}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-6.1 {thread::unwind - blocked unwind} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::create {thread::unwind; vwait dummy}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {2}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-7.0 {thread::exit} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create -joinable {thread::exit}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::join $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {666}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-8.0 {thread::exists - true} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::exists [thread::create]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-8.1 {thread::exists - false} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {set x 5}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::exists $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-9.0 {thread::id} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {[thread::id] == $::tcltest::mainThread}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-9.1 {thread::id - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::id x} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::id"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-10.0 {thread::names args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::names x} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::names"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.0 {thread::send - no args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::send} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::send ?-async? ?-head? id script ?varName?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.1 {thread::send - simple script} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five [thread::send $tid {set x 5}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.2 {thread::send - bad thread id} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid dummy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::send $tid {set x 5}} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {invalid thread handle "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.3 {thread::send - test TCL_ERROR return code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid {dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg} {1 {invalid command name "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.4 {thread::send - test TCL_RETURN return code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid {return} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {2 {}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.5 {thread::send - test TCL_BREAK return code} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid {break} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {3 {}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.6 {thread::send - asynchronous send} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {set x 5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five [thread::send $tid {set x}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.7 {thread::send - async send with event-loop wait} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {set x 5} five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.8 {thread::send - send to self directly} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send [thread::id] {set x 5} five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.9 {thread::send - send to self asynchronously} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::send -async [thread::id] {set x 5} five} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {can't notify self}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.10 {thread::send - preserve errorInfo} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set len [llength [thread::names]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::send $tid {set undef}} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg $errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {can't read "undef": no such variable} {can't read "undef": no such variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while executing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"set undef"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    invoked from within
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"thread::send $tid {set undef}"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-11.11 {Thread_Send preserve errorCode} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::send $tid {error ERR INFO CODE}} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg $errorCode
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 ERR CODE}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-12.0 {thread::wait} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create {set x 5; thread::wait}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid {set x} five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set five
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-13.0 {thread::broadcast} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {unset tids}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach i {1 2 3 4} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend tids [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::broadcast {set x 5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {unset r}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach tid $tids {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend r [thread::send $tid {if {[info exists x]} {set x}}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5 5 5 5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-13.1 {thread::broadcast no args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::broadcast} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::broadcast script"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-14.0 {thread::eval - no arguments} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::eval} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::eval ?-lock <mutexHandle>? arg ?arg...?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-14.1 {thread::eval - bad arguments} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::eval -lock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::eval ?-lock <mutexHandle>? arg ?arg...?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-14.2 {thread::eval - missing script argument} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::eval -lock dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::eval ?-lock <mutexHandle>? arg ?arg...?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-14.3 {thread::eval - bad mutex handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::eval -lock dummy {set x 5}} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such mutex "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-14.4 {thread::eval - nested eval} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::eval {thread::eval {thread::eval {set x 5}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {5}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.0 {thread::configure - bad arguments} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::configure} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::configure threadlId ?optionName? ?value? ?optionName value?..."}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.1 {thread::configure - bad thread id argument} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::configure dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {invalid thread handle "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.2 {thread::configure - bad configure option} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::configure [thread::id] -dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {bad option "-dummy", should be one of -eventmark, -unwindonerror or -errorstate}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.3 {thread::configure - read all configure options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {unset opts}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set opts [thread::configure $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {[llength $opts] % 2}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.4 {thread::configure - check configure option names} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {unset opts}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set opts [thread::configure $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array names opts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {-errorstate -unwindonerror -eventmark}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.5 {thread::configure - get one config option} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend l [thread::configure $tid -eventmark]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend l [thread::configure $tid -unwindonerror]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend l [thread::configure $tid -errorstate]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set l
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {0 0 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.6 {thread::configure - set -unwindonerror option} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::configure $tid -unwindonerror 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [catch {thread::send $tid {set dummy}}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set e [thread::exists $tid]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.7 {thread::configure - set -errorstate option} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::configure $tid -errorstate 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid {set dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {thread is in error}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-15.8 {thread::configure - set -eventmark option} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::configure $tid -eventmark 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {after 2000}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t1 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {after 2000}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set t2 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {($t2 - $t1) >= 2}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-16.0 {thread::errorproc - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::errorproc foo bar} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::errorproc ?proc?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-16.1 {thread::errorproc - errorproc change} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::errorproc foo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::errorproc ThreadError
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set new [thread::errorproc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {ThreadError}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-16.2 {thread::errorproc - async reporting} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set etid ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emsg ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc myerrproc {tid msg} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        global etid emsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set etid $tid
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set emsg $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::errorproc myerrproc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {set x}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list [expr {$etid == $tid}] $emsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {can't read "x": no such variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while executing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"set x"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.1 {thread::transfer - channel lists} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [regexp $file [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [regexp $file [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [regexp $file [thread::send $tid {file channels}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid "close $file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 0 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.2 {thread::transfer - target thread dying} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid {after 3000 ; thread::release}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {thread::transfer $tid $file} msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {transfer failed: target thread died}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.3 {thread::transfer - clearing of fileevents} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc _HandleIt_ {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        global gotEvents tid file    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$gotEvents == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            thread::transfer $tid $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # From now on no events should be delivered anymore,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # restricting the end value to 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        incr gotEvents
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set gotEvents 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fileevent $file readable _HandleIt_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait gotEvents
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid "close $file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set gotEvents
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.4 {thread::transfer - file - readable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [regexp $file [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [string length [thread::send $tid "read -nonewline $file"]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid "close $file"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} [string length [::tcltest::viewFile dummyForTransfer]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.5 {thread::transfer - file - closeable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set file [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [regexp $file [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [thread::send $tid "close $file"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.6 {thread::transfer - socket - readable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set lsock ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc accept {sock host port} {global lsock ; set lsock $sock}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set listener [socket -server accept 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set port [lindex [fconfigure $listener -sockname] 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set socket [socket localhost $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait lsock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts  $lsock hello
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    flush $lsock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [thread::send $tid [list gets $socket]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [list close $socket]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $listener
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $lsock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {hello}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.7 {thread::transfer - socket - closeable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set lsock ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc accept {sock host port} {global lsock ; set lsock $sock}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set listener [socket -server accept 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set port [lindex [fconfigure $listener -sockname] 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set socket [socket localhost $port]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait lsock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set     res [thread::send $tid "regexp {$socket} \[file channels\]"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [thread::send $tid [list close $socket]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [thread::send $tid "regexp {$socket} \[file channels\]"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $listener
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $lsock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {} 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We cannot test console channels, nor serials. Because we do not
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# really know if they are available, and under what names. But a pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# channel, which uses the same type of code is something we can
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# do. Lucky us.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.8 {thread::transfer - pipe - readable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set s [makeFile {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts hello
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   flush stdout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } pscript]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set pipe [open "|[info nameofexecutable] $s" r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [list set pipe $pipe]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res [thread::send $tid {gets $pipe}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send  $tid {catch {close $pipe}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    removeFile pscript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {hello}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The difference between 9 and 10 is the location of the close
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# operation. For 9 it is the original thread, for 10 the other
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# thread. 10 currently fails. It seems to be some signal stuff.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.9 {thread::transfer - pipe - closable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set s [makeFile {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevent stdin readable {if {[eof stdin]} {exit 0} ; gets stdin}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } pscript]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set pipe [open "|[info nameofexecutable] $s" r+]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [list set chan $pipe]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send     $tid {thread::detach $chan}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::attach $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set     res [regexp $pipe [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [close  $pipe]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [regexp $pipe [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    removeFile pscript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {} 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.10 {thread::transfer - pipe - closable?} {chanTransfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set s [makeFile {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevent stdin readable {if {[eof stdin]} {exit 0} ; gets stdin}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } pscript]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set pipe [open "|[info nameofexecutable] $s" r+]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [list set chan $pipe]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set     res [thread::send $tid {regexp $chan [file channels]}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # This can fail on Linux, because there a thread cannot 'wait' on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # the children of a different thread (in the same process). This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # is for Linux < 2.4. For 2.4 it should be possible, but the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # language is cautionary, so it may still fail.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   lappend res [thread::send $tid {close  $chan}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   # Fake a result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   lappend res {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend res [thread::send $tid {regexp $chan [file channels]}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    removeFile pscript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {} 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.11a {thread::transfer - pipe - readable event - no transfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set s [makeFile {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   after 5000 {exit 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevent stdin readable {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if {[eof  stdin]} {exit 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if {[gets stdin line] <0} return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       puts response
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } pscript] ;# {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set pipe [open "|[info nameofexecutable] $s" r+]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fconfigure $pipe -blocking 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fileevent  $pipe readable {read $pipe ; set cond ok}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 3000 {set cond timeout}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $pipe tick ; flush $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    vwait ::cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {close $pipe}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    removeFile pscript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-17.11b {thread::transfer - pipe - readable event - with transfer} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set s [makeFile {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   after 5000 {exit 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevent stdin readable {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if {[eof stdin]} {exit 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if {[gets stdin line] <0} return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       puts response
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   vwait forever
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   exit 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } pscript] ;# {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set pipe [open "|[info nameofexecutable] $s" r+]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::transfer $tid $pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid [list set chan $pipe]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::send $tid {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fconfigure $chan -blocking 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fileevent  $chan readable {read $chan ; set cond ok}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   after 3000 {set cond timeout}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   puts $chan tick ; flush $chan
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   vwait ::cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   catch {close $pipe}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    removeFile pscript
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} ok
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-18.0 {thread::detach - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::detach} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::detach channel"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-18.1 {thread::detach - channel} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set fd [open $dummy r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r1 [regexp $fd [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::detach $fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r2 [regexp $fd [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $r1 $r2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-18.2 {thread::attach - in different thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid "thread::attach $fd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r1 [thread::send $tid "regexp $fd \[file channels\]"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send $tid "thread::detach $fd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $r1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-18.3 {thread::attach - in same thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::attach $fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r1 [regexp $fd [file channels]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    close $fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.0 {thread::mutex - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::mutex option ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.1 {thread::mutex - command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {bad option "dummy": must be create, destroy, lock, or unlock}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.2 {thread::mutex - more command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex create -dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::mutex create ?-recursive?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.3 {thread::mutex - create exclusive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [regexp {mid[0-9]+} $emutex]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.4 {thread::mutex - create recursive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rmutex [thread::mutex create -recursive]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [regexp {rid[0-9]+} $rmutex]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.5 {thread::mutex - lock/unlock exclusive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.6 {thread::mutex - deadlock exclusive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex lock $emutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {locking the same exclusive mutex twice from the same thread}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.7 {thread::mutex - lock invalid mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex lock dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such mutex "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.8 {thread::mutex - lock/unlock recursive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rmutex [thread::mutex create -recursive]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.9 {thread::mutex - deadlock exclusive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rmutex [thread::mutex create -recursive]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex lock $rmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {0 {}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.10 {thread::mutex - destroy locked exclusive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex destroy $emutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex is in use}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.11 {thread::mutex - destroy locked recursive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rmutex [thread::mutex create -recursive]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex destroy $rmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex is in use}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.12 {thread::mutex - lock exclusive between threads} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after 2000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time1 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time2 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {($time2 - $time1) >= 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.13 {thread::mutex - lock args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex lock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::mutex lock mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.14 {thread::mutex - unlock args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex unlock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::mutex unlock mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-19.15 {thread::mutex - destroy args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::mutex destroy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::mutex destroy mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.0 {thread::rwmutex - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex option ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.1 {thread::rwmutex - command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {bad option "dummy": must be create, destroy, rlock, wlock, or unlock}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.2 {thread::rwmutex - more command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex create dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex create"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.3 {thread::rwmutex - more command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex create dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex create"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.4 {thread::rwmutex - mutex handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [regexp {wid[0-9]+} $rwmutex]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.5 {thread::rwmutex - bad handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex rlock dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such mutex "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.6 {thread::mutex - destroy readlocked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex rlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex destroy $rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex is in use}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.7 {thread::mutex - destroy writelocked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex wlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex destroy $rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex is in use}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.8 {thread::rwmutex - readlock mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::rwmutex rlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after 1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time1 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex rlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time2 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {($time2 - $time1) < 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.9 {thread::rwmutex - writelock mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::rwmutex wlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        after 2000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time1 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex rlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time2 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    expr {($time2 - $time1) >= 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.10 {thread::rwmutex - readlock args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex rlock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex rlock mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.11 {thread::rwmutex - writelock args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex wlock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex wlock mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.12 {thread::rwmutex - unlock args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex unlock} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex unlock mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.13 {thread::rwmutex - destroy args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex destroy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::rwmutex destroy mutexHandle"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.14 {thread::mutex - write-lock write-locked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex wlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex wlock $rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {write-locking the same read-write mutex twice from the same thread}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.15 {thread::mutex - read-lock write-locked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex wlock $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex rlock $rwmutex} msg]  
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex unlock $rwmutex 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {read-locking already write-locked mutex from the same thread}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-20.16 {thread::mutex - unlock not locked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::rwmutex unlock $rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex is not locked}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.0 {thread::cond - args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond option ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.1 {thread::cond - command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {bad option "dummy": must be create, destroy, notify, or wait}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.2 {thread::cond - more command options} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond create dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond create"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.3 {thread::cond - cond handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [regexp {cid[0-9]+} $cond]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.4 {thread::cond - destroy args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond destroy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond destroy condHandle ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.5 {thread::cond - destroy bad handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond destroy dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such condition variable "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.6 {thread::cond - notify args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond notify} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond notify condHandle ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.7 {thread::cond - wait args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond wait condHandle ?args?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.8 {thread::cond - wait bad handle} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such condition variable "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.9 {thread::cond - wait no mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait $cond} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {wrong # args: should be "thread::cond wait condHandle mutexHandle ?timeout?"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.10 {thread::cond - wait bad mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait $cond dummy} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {no such mutex "dummy"}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.11 {thread::cond - wait unlocked mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait $cond $emutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex not locked or wrong type}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.12 {thread::cond - wait locked mutex from wrong thread} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst -nocommands {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set code [catch {thread::cond wait $cond $emutex 1000} result]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 20
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond notify $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid "set code"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set r [thread::send $tid "set result"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c $r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex not locked or wrong type}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.13 {thread::cond - wait recursive mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rmutex [thread::mutex create -recursive]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait $cond $rmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $rmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex not locked or wrong type}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.14 {thread::cond - wait readwrite mutex} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set rwmutex [thread::rwmutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set x [catch {thread::cond wait $cond $rwmutex} msg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::rwmutex destroy $rwmutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $x $msg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 {mutex not locked or wrong type}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.15 {thread::cond - regular timed wait} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::cond wait $cond $emutex 2000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set test 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time1 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond notify $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c [thread::send $tid "info exists test"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set time2 [clock seconds]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond destroy $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c [expr {($time2 - $time1) < 2}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test thread-21.16 {thread::cond - delete waited variable} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set tid [thread::create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set emutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cond [thread::cond create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::send -async $tid [subst {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex lock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::cond wait $cond $emutex 500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex unlock $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    update
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c1 [catch {thread::cond destroy $cond} r1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::cond notify $cond
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    after 1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set c2 [catch {thread::cond destroy $cond} r2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ThreadReap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy $emutex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list $c1 $c2 $r1 $r2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} {1 0 {condition variable is in use} {}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-removeFile dummyForTransfer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-::tcltest::cleanupTests
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tests/tpool.test b/vendor/thread2.7.3/tests/tpool.test
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index a09c86384..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tests/tpool.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tests/tsv.test b/vendor/thread2.7.3/tests/tsv.test
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index a09c86384..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tests/tsv.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/tests/ttrace.test b/vendor/thread2.7.3/tests/ttrace.test
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index a09c86384..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/tests/ttrace.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-return
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/unix/CONFIG b/vendor/thread2.7.3/unix/CONFIG
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index ecc7efefe..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/unix/CONFIG
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,53 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/bin/sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This file contains collection of configure directives
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# for building the Threading extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Comment-out next line if building with GCC compiler.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# CC=gcc; export CC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Tcl on Unix (uses public Tcl library)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ----------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ../configure --enable-threads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# As of 2.6, the threading extension supports persistent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# shared variables. As an working example of this, there
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# is a simple wrapper for the popular Gdbm library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Uncomment the following line if you like to compile the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Gdbm wrapper for persistent shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ../configure --enable-threads --with-gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If your Gdbm library is not installed in one of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# default system locations (/usr/lib, /usr/local/lib ...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# please use following directive. Note that both library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# file *and* includes should be located in "/my/gdbm". 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Of course, you have to replace the "/my/gdbm" below
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# with the exact location, as found in your system:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ../configure --enable-threads --with-gdbm=/my/gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# AOLserver 4.X; Uses public Tcl library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ----------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# nsdir="/usr/local/naviserver"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ../configure --enable-threads \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --with-naviserver=$nsdir \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --prefix=$nsdir --exec-prefix=$nsdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# NaviServer/AOLserver uses its own package loading mechanism.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# To load, just do "ns_eval package require Thread"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# at the NaviServer/AOLserver startup or later from any thread.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Mac OS X; Uses public Tcl library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ----------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ../configure --enable-threads \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --mandir=/usr/local/share/man \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --libdir=/Library/Tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --with-tcl=/Library/Frameworks/Tcl.framework \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   --with-tclinclude=/Library/Frameworks/Tcl.framework/Headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# EOF
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/unix/README b/vendor/thread2.7.3/unix/README
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4ca4c5cd0..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/unix/README
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,70 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-I. Building the Tcl thread extension for Unix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-=============================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Extension can be compiled on several Unix derivates including various
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distributions of Linux. Build process is pretty straightforward. I've
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checked some versions of Solaris, Linux and Darwin, but the extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-should compile without problems on any Unix-like operating system
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-with a proper pthreads library implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To build on Unix-like operating systems, start with the CONFIG script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and see if there is already a combination of the "configure" options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-which may satisfy your needs. If not, you can run the configure script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-located in the root of the distribution directory with a choice of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-supported options yourself.  If yes, you can uncomment corresponding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lines from the CONFIG script and do:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    % sh CONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Either way, this will create a Makefile which you use to run "make" and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"make install".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You can use "make clean" to clean the directory from temporary compilation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-files and/or "make distclean" to additionaly remove local config files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You might want to do "make test" before doing the "make install" in order
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to run the regression tests on the package. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To explore other building options, look into the CONFIG file for more
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Note for NaviServer/AOLserver users
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The extension can be compiled as a loadable module for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NaviServer/AOLserver  version 4.0 or higher. In order to do this,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-use "--with-naviserver" configure option to specify the directory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-containing the NaviServer/AOLserver distribution. The CONFIG script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-has an example how to invoke configure in order to build the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extension as NaviServer/AOLserver module. Note, however, that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"make install" and "make test" targets are still not supported for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NaviServer/AOLserver builds. This will be corrected in one of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the future releases.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To fine-tune, you might also want to make the tsv::* commands replace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the NaviServer/AOLserver built-in nsv_* family of commands, since
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-they are API  compatible and provide richer command set plus advanced
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shared-object storage of shared data. Go to the generic/threadSvCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-file and look at the beginning of the file for the:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* #define NSV_COMPAT 1 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-So, uncomment the line, recompile and there you go.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-II. Building optional support libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-=======================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As of 2.6 release, this extension supports persistent shared variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To use this functionality, you might need to download and compile some 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-other supporting libraries. Currently, there is a simple implementation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of shared variable persistency built atop of popular GNU Gdbm package.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You can obtain the latest version of the Gdbm package from the GNU 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-website at: http://www.gnu.org/software/gdbm/gdbm.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To compile with GNU Gdbm support you must configure with --with-gdbm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-switch. This option, if used, will try to locate the Gdbm library on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-your system at couple of standard locations. You might override this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-behaviour by giving --with-gdbm=/some/dir. Note that both library file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and the include file must then reside in this directory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--EOF-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/unix/threadUnix.c b/vendor/thread2.7.3/unix/threadUnix.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 52d1530f1..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/unix/threadUnix.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,27 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadUnix.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Unix specific aspects for the thread extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * see http://dev.activestate.com/doc/howto/thread_model.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Some of this code is based on work done by Richard Hipp on behalf of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Conservation Through Innovation, Limited, with their permission.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1998 by Sun Microsystems, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1999,2000 by Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "../generic/tclThread.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* EOF $RCSfile: threadUnix.c,v $ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Emacs Setup Variables */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Local Variables:      */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* mode: C               */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* indent-tabs-mode: nil */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* c-basic-offset: 4     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* End:                  */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/CONFIG b/vendor/thread2.7.3/win/CONFIG
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index df5aac144..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/CONFIG
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,21 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This is how I run configure.  You'll want to change the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# pathnames to match your system, of course.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Remember that if you use the --enable-sybols, you need to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# use the thread25d.dll in a tclsh that has also been compiled
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# with symbols (e.g., tclsh84g.exe or tclsh84d.exe).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If you want to build both debug and non-debug versions, then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# create "debug" and "release" directories and run configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# from in those directories with the appropriate flags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Note the CC=gcc must be set *before* the "configure" is ran.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# This is really needed, otherwise configure will not be able
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# to compile the small test file which checks the presence
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of the MinGW build environment. It is *not* enough to use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# "--enable-gcc" configure option; you *need* to define CC.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-export CC=gcc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-sh ../configure --enable-threads --with-tcl=e:/tcl/win
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/README.txt b/vendor/thread2.7.3/win/README.txt
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 596623ba5..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/README.txt
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,62 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-I. Building the Tcl thread extension for Windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Thread extension supports two build options:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-o. MinGW builds:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-----------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-The extension can be compiled under Windows using the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MinGW (http://www.mingw.org) environment. You can also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-download the ready-to-go copy of the MinGW from the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-same place you've downloaded this extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You should compile the Tcl core with MinGW first. After
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that, you can compile the extension by running the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configure/make from this directory. You can also use the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CONFIG script to do this. You might want to edit the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-script to match your environment and then just do:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sh CONFIG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This should go smoothly, once you got Tcl core compiled ok.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-o. Microsoft MSVC++ build:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Files in this directory may be useful if you have not set up
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-your TEA (i.e., MinGW) environment and you're using the MSVC++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from Micro$oft.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-To build the extension invoke the following command:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    nmake -f makefile.vc TCLDIR=<path>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You would need to give the <path> of the Tcl distribution where
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tcl.h and other needed Tcl files are located.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Please look into the makefile.vc file for more information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Alternatively, you can open the extension workspace and project files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(thread_win.dsw and thread_win.dsp) from within the MSVC++ and press
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the F7 key to build the extension under the control of the MSVC IDE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-II. Building optional support libraries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-=======================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-As of 2.6 release, this extension supports persistent shared 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variables. To use this functionality, you might need to download 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and compile some other supporting libraries. Currently, there is 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-a simple implementation of shared variable persistency built atop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of popular GNU Gdbm package. You can obtain the latest version of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the Gdbm from: http://www.gnu.org/software/gdbm/gdbm.html.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For the impatient, there are Windows ports of GNU Gdbm found on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-various places on the Internet. The easiest way to start is to go 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to the GnuWin32 project: http://sourceforge.net/projects/gnuwin32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and fetch yourself a compiled GNU Gdbm DLL. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--EOF-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/makefile.vc b/vendor/thread2.7.3/win/makefile.vc
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 6862ac8e9..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/makefile.vc
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,487 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------- -*- makefile -*-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# makefile.vc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1995-1996 Sun Microsystems, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 1998-2000 Ajuba Solutions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2001-2005 ActiveState Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2001-2004 David Gravereaux.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2003-2008 Pat Thoyts.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSG = ^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Platform SDK first to setup the environment.  Jump to this line to read^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-the build instructions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!error $(MSG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HOW TO USE this makefile:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     environment.  This is used as a check to see if vcvars32.bat had been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     run prior to running nmake or during the installation of Microsoft
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     Either way is valid.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     directory to setup the proper environment, if needed, for your
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     current setup.  This is a needed bootstrap requirement and allows the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     swapping of different environments to be easier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     vcvars32.bat according to the instructions for it.  This can also
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     turn on the 64-bit compiler, if your SDK has it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 3)  Targets are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  all       -- Builds everything.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  <project> -- Builds the project (eg: nmake sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  test      -- Builds and runs the test suite.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  install   -- Installs the built binaries and libraries to $(INSTALLDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#               in an appropriate subdirectory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  clean/realclean/distclean -- varying levels of cleaning.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 4)  Macros usable on the commandline:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  INSTALLDIR=<path>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Sets where to install Tcl from the built binaries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          C:\Progra~1\Tcl is assumed when not specified.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  OPTS=static,msvcrt,staticpkg,nothreads,symbols,profile,loimpact,none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Sets special options for the core.  The default is for none.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Any combination of the above may be used (comma separated).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          'none' will over-ride everything to nothing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          static  =  Builds a static library of the core instead of a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     dll.  The shell will be static (and large), as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          msvcrt  =  Affects the static option only to switch it from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     using libcmt(d) as the C runtime [by default] to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     msvcrt(d). This is useful for static embedding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     support.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          staticpkg = Affects the static option only to switch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     tclshXX.exe to have the dde and reg extension linked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     inside it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          nothreads = Turns off multithreading support (not supported).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          thrdalloc = Use the thread allocator (shared global free pool)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     This is the default on threaded builds.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          symbols  = Debug build. Links to the debug C runtime, disables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     optimizations and creates pdb symbols files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          profile  = Adds profiling hooks.  Map file is assumed.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          loimpact = Adds a flag for how NT treats the heap to keep memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                     in use, low.  This is said to impact alloc performance.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  STATS=memdbg,compdbg,none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Sets optional memory and bytecode compiler debugging code added
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          to the core.  The default is for none.  Any combination of the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          above may be used (comma separated).  'none' will over-ride
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          everything to nothing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          memdbg   = Enables the debugging memory allocator.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          compdbg  = Enables byte compilation logging.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  MACHINE=(ARM|AMD64|IA64|X86)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Set the machine type used for the compiler, linker, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          resource compiler.  This hook is needed to tell the tools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          when alternate platforms are requested.  IX86 is the default
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          when not specified. If the CPU environment variable has been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          set (ie: recent Platform SDK) then MACHINE is set from CPU.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TMP_DIR=<path>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  OUT_DIR=<path>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Hooks to allow the intermediate and output directories to be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          changed.  $(OUT_DIR) is assumed to be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $(BINROOT)\(Release|Debug) based on if symbols are requested.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  TESTPAT=<file>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          Reads the tests requested to be run from this file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  CFG_ENCODING=encoding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          name of encoding for configuration information. Defaults
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#          to cp1252
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# 5)  Examples:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Basic syntax of calling nmake looks like this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                        Standard (no frills)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       Setting environment for using Microsoft Visual C++ tools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>nmake -f makefile.vc all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                         Building for Win64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       Setting environment for using Microsoft Visual C++ tools.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       Targeting Windows pre64 RETAIL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#==============================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist("makefile.vc")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSG = ^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-You must run this makefile only from the directory it is in.^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Please `cd` to its location first.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!error $(MSG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Project specific information (EDIT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You should edit this with the name and version of your project. This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# information is used to generate the name of the package library and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# it's install location.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# For example, the sample extension is  going to build sample05.dll and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# would install it into $(INSTALLDIR)\lib\sample05
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You need to specify the object files that need to be linked into your
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# binary here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PROJECT = thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Uncomment the following line if this is a Tk extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#PROJECT_REQUIRES_TK=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include "rules.vc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include "pkg.vc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DOTVERSION      = $(PACKAGE_VERSION:"=) #"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VERSION         = $(PACKAGE_MAJOR)$(PACKAGE_MINOR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STUBPREFIX      = $(PROJECT)stub
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DLLOBJS = \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadNs.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadSvCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadSpCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadPoolCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\psGdbm.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadSvListCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadSvKeylistCmd.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\tclXkeylist.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\threadWin.obj \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(TMP_DIR)\thread.res
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJHEADERS =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Target names and paths ( shouldn't need changing )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BINROOT            = $(MAKEDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ROOT            = $(MAKEDIR)\..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJIMPLIB  = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJLIB             = $(OUT_DIR)\$(PRJLIBNAME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJSTUBLIBNAME     = $(STUBPREFIX)$(VERSION).lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Make sure we use backslash only.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIB_INSTALL_DIR            = $(PRJ_INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BIN_INSTALL_DIR            = $(PRJ_INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DOC_INSTALL_DIR            = $(PRJ_INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INCLUDE_INSTALL_DIR        = $(_TCLDIR)\include
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### The following paths CANNOT have spaces in them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GENERICDIR = $(ROOT)\generic
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WINDIR             = $(ROOT)\win
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LIBDIR          = $(ROOT)\lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DOCDIR             = $(ROOT)\doc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TOOLSDIR   = $(ROOT)\tools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPATDIR  = $(ROOT)\compat
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Compile flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(OPTIMIZING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### This cranks the optimization level to maximize speed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cdebug     = $(OPTIMIZATIONS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cdebug     =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else if "$(MACHINE)" == "IA64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Warnings are too many, can't support warnings into errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cdebug     = -Zi -Od $(DEBUGFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cdebug     = -Zi -W3 $(DEBUGFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Common compiler options that are architecture specific
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "ARM"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-carch =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Declarations common to all compiler options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(MSVCRT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG) && !$(UNCHECKED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-crt = -MDd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-crt = -MD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG) && !$(UNCHECKED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-crt = -MTd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-crt = -MT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cflags = $(cflags) -DMODULE_SCOPE=extern -DUSE_TCL_STUBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cflags = $(cflags) -DTCL_TIP143 -DTCL_TIP285
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if defined(TKSTUBLIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cflags = $(cflags) -DUSE_TK_STUBS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-INCLUDES   = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BASE_CFLAGS        = $(cflags) $(cdebug) $(crt) $(INCLUDES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_CFLAGS = -DPACKAGE_NAME="\"$(PROJECT)\"" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             -DBUILD_$(PROJECT) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             $(BASE_CFLAGS) $(OPTDEFINES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Stubs files should not be compiled with -GL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Link flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ldebug     = -debug
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(MSVCRT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ldebug = $(ldebug) -nodefaultlib:msvcrt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ldebug     = -release -opt:ref -opt:icf,3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Declarations common to all linker options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lflags     = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(PROFILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lflags     = $(lflags) -profile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Align sections for PE size savings.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lflags     = $(lflags) -opt:nowin98
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Align sections for speed in loading by choosing the virtual page size.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lflags     = $(lflags) -align:4096
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(LOIMPACT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lflags     = $(lflags) -ws:aggressive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dlllflags = $(lflags) -dll
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-conlflags = $(lflags) -subsystem:console
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-guilflags = $(lflags) -subsystem:windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-baselibs  = $(TCLSTUBLIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if defined(TKSTUBLIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-baselibs  = $(baselibs) $(TKSTUBLIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Avoid 'unresolved external symbol __security_cookie' errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# c.f. http://support.microsoft.com/?id=894573
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-baselibs   = $(baselibs) bufferoverflowU.lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TclTest flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(TESTPAT)" != ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Project specific targets (EDIT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-all:           setup $(PROJECT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(PROJECT): setup pkgIndex $(PRJLIB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install:    install-binaries install-libraries install-docs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pkgIndex:   $(OUT_DIR)\pkgIndex.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test: setup $(PROJECT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCLINSTALL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set PATH=$(_TCLDIR)\bin;$(PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(DEBUGGER) $(TCLSH) "$(ROOT)/tests/all.tcl" $(TESTFLAGS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-shell: setup $(PROJECT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set VLERQ_LIBRARY=$(LIBDIR:\=/)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set TCLLIBPATH=$(OUT_DIR:\=/)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCLINSTALL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set PATH=$(_TCLDIR)\bin;$(PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(DEBUGGER) $(TCLSH) $(SCRIPT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-setup:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See <tcl>/win/coffbase.txt for extension base addresses.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(PRJLIB): $(DLLOBJS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(lib32) -nologo -out:$@ @<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$**
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(link32) $(dlllflags) -base:0x10C80000 -out:$@ $(baselibs) @<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$**
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(_VC_MANIFEST_EMBED_DLL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -@del $*.exp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(PRJSTUBLIB): $(PRJSTUBOBJS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(lib32) -nologo -nodefaultlib -out:$@ $(PRJSTUBOBJS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Implicit rules
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{$(WINDIR)}.c{$(TMP_DIR)}.obj::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{$(WINDIR)}.rc{$(TMP_DIR)}.res:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(rc32) -fo $@ -r -i "$(GENERICDIR)" $(TCL_INCLUDES) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -D_WIN32 -D__WIN32__ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DDOTVERSION=\"$(DOTVERSION)\" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DVERSION=\"$(VERSION)$(SUFX)\" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DDEBUG=$(DEBUG) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DPACKAGE_MAJOR=$(PACKAGE_MAJOR) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DPACKAGE_MINOR=$(PACKAGE_MINOR) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           -DPACKAGE_VERSION=\"$(PACKAGE_VERSION)\" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -d DEBUG \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -d TCL_THREADS \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   -d STATIC_BUILD \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SUFFIXES:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.SUFFIXES:.c .rc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Explicit dependency rules
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#-------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#{$(WINDIR)}.c{$(TMP_DIR)}.obj ::
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\psGdbm.c: $(GENERICDIR)\psGdbm.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\threadSpCmd.c : $(GENERICDIR)\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\threadSvCmd.c : $(GENERICDIR)\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\threadPoolCmd.c : $(GENERICDIR)\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\threadSvListCmd.c : $(GENERICDIR)\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(GENERICDIR)\threadSvKeylistCmd.c : $(GENERICDIR)\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.PHONY: $(OUT_DIR)\pkgIndex.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @nmakehlp -s << $** > $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@PACKAGE_NAME@       thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@PACKAGE_VERSION@    $(DOTVERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@PKG_LIB_FILE@       $(PRJLIBNAME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Installation. (EDIT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# You may need to modify this section to reflect the final distribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of your files and possibly to generate documentation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-binaries:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-libraries:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo Installing library files to '$(SCRIPT_INSTALL_DIR)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-install-docs:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(DOCDIR)\man $(CPY) $(DOCDIR)\man\*.n "$(DOC_INSTALL_DIR)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Clean up
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#---------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-clean:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-realclean: clean
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distclean: realclean
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/nmakehlp.c b/vendor/thread2.7.3/win/nmakehlp.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 84cf75c89..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/nmakehlp.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,697 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * nmakehlp.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This is used to fix limitations within nmake and the environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2002 by David Gravereaux.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2006 by Pat Thoyts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ----------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _CRT_SECURE_NO_DEPRECATE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_SHLWAPI_GDI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_SHLWAPI_STREAM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define NO_SHLWAPI_REG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <shlwapi.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#pragma comment (lib, "user32.lib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#pragma comment (lib, "kernel32.lib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#pragma comment (lib, "shlwapi.lib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <math.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This library is required for x64 builds with _some_ versions of MSVC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if defined(_M_IA64) || defined(_M_AMD64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if _MSC_VER >= 1400 && _MSC_VER < 1500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#pragma comment(lib, "bufferoverflowU")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* ISO hack for dumb VC++ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef _MSC_VER
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define   snprintf _snprintf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* protos */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int CheckForCompilerFeature(const char *option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int CheckForLinkerFeature(const char *option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int IsIn(const char *string, const char *substring);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int SubstituteFile(const char *substs, const char *filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int QualifyPath(const char *path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static DWORD WINAPI ReadFromPipe(LPVOID args);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* globals */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define CHUNK      25
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define STATICBUFFERSIZE    1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HANDLE pipe;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char buffer[STATICBUFFERSIZE];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} pipeinfo;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * exitcodes: 0 == no, 1 == yes, 2 == error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int argc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *argv[])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char msg[300];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DWORD dwWritten;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int chars;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Make sure children (cl.exe and link.exe) are kept quiet.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Make sure the compiler and linker aren't effected by the outside world.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SetEnvironmentVariable("CL", "");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SetEnvironmentVariable("LINK", "");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (argc > 1 && *argv[1] == '-') {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   switch (*(argv[1]+1)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 'c':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "usage: %s -c <compiler option>\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "Tests for whether cl.exe supports an option\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return CheckForCompilerFeature(argv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 'l':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "usage: %s -l <linker option>\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "Tests for whether link.exe supports an option\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return CheckForLinkerFeature(argv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 'f':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "usage: %s -f <string> <substring>\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "Find a substring within another\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       } else if (argc == 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            * If the string is blank, there is no match.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return IsIn(argv[2], argv[3]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 's':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc == 2) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "usage: %s -s <substitutions file> <file>\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "Perform a set of string map type substutitions on a file\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   "exitcodes: 0\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return SubstituteFile(argv[2], argv[3]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 'V':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc != 4) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "usage: %s -V filename matchstring\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "Extract a version from a file:\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "eg: pkgIndex.tcl \"package ifneeded http\"",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case 'Q':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (argc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "usage: %s -Q path\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "Emit the fully qualified path\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       return QualifyPath(argv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       "This is a little helper app to equalize shell differences between WinNT and\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       "Win9x and get nmake.exe to accomplish its job.\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CheckForCompilerFeature(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *option)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    STARTUPINFO si;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PROCESS_INFORMATION pi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SECURITY_ATTRIBUTES sa;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DWORD threadID;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char msg[300];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BOOL ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HANDLE hProcess, h, pipeThreads[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char cmdline[100];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hProcess = GetCurrentProcess();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&si, sizeof(STARTUPINFO));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.cb = sizeof(STARTUPINFO);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.dwFlags   = STARTF_USESTDHANDLES;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.hStdInput = INVALID_HANDLE_VALUE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.lpSecurityDescriptor = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.bInheritHandle = FALSE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create a non-inheritible pipe.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CreatePipe(&Out.pipe, &h, &sa, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Dupe the write side, make it inheritible, and close the original.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Same as above, but for the error side.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CreatePipe(&Err.pipe, &h, &sa, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Base command line.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Append our option for testing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lstrcat(cmdline, option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Filename to compile, which exists, but is nothing and empty.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lstrcat(cmdline, " .\\nul");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ok = CreateProcess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Module name. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cmdline,        /* Command line. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Process handle not inheritable. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Thread handle not inheritable. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TRUE,           /* yes, inherit handles. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DETACHED_PROCESS, /* No console for you. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Use parent's environment block. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Use parent's starting directory. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       &si,        /* Pointer to STARTUPINFO structure. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       &pi);       /* Pointer to PROCESS_INFORMATION structure. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!ok) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   DWORD err = GetLastError();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           (300-chars), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Close our references to the write handles that have now been inherited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(si.hStdOutput);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(si.hStdError);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForInputIdle(pi.hProcess, 5000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pi.hThread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Start the pipe reader threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Block waiting for the process to end.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForSingleObject(pi.hProcess, INFINITE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pi.hProcess);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wait for our pipe to get done reading, should it be a little slow.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pipeThreads[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pipeThreads[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Look for the commandline warning code in both streams.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return !(strstr(Out.buffer, "D4002") != NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             || strstr(Err.buffer, "D4002") != NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             || strstr(Out.buffer, "D9002") != NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             || strstr(Err.buffer, "D9002") != NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             || strstr(Out.buffer, "D2021") != NULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             || strstr(Err.buffer, "D2021") != NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CheckForLinkerFeature(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *option)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    STARTUPINFO si;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PROCESS_INFORMATION pi;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    SECURITY_ATTRIBUTES sa;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DWORD threadID;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char msg[300];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BOOL ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HANDLE hProcess, h, pipeThreads[2];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char cmdline[100];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    hProcess = GetCurrentProcess();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&si, sizeof(STARTUPINFO));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.cb = sizeof(STARTUPINFO);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.dwFlags   = STARTF_USESTDHANDLES;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    si.hStdInput = INVALID_HANDLE_VALUE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.lpSecurityDescriptor = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sa.bInheritHandle = TRUE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Create a non-inheritible pipe.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CreatePipe(&Out.pipe, &h, &sa, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Dupe the write side, make it inheritible, and close the original.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Same as above, but for the error side.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CreatePipe(&Err.pipe, &h, &sa, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Base command line.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lstrcpy(cmdline, "link.exe -nologo ");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Append our option for testing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lstrcat(cmdline, option);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ok = CreateProcess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Module name. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       cmdline,        /* Command line. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Process handle not inheritable. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Thread handle not inheritable. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       TRUE,           /* yes, inherit handles. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       DETACHED_PROCESS, /* No console for you. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Use parent's environment block. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       NULL,           /* Use parent's starting directory. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       &si,        /* Pointer to STARTUPINFO structure. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       &pi);       /* Pointer to PROCESS_INFORMATION structure. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!ok) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   DWORD err = GetLastError();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int chars = snprintf(msg, sizeof(msg) - 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           (300-chars), 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Close our references to the write handles that have now been inherited.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(si.hStdOutput);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(si.hStdError);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForInputIdle(pi.hProcess, 5000);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pi.hThread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Start the pipe reader threads.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Block waiting for the process to end.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForSingleObject(pi.hProcess, INFINITE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pi.hProcess);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Wait for our pipe to get done reading, should it be a little slow.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pipeThreads[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    CloseHandle(pipeThreads[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     * Look for the commandline warning code in the stderr stream.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return !(strstr(Out.buffer, "LNK1117") != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       strstr(Err.buffer, "LNK1117") != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       strstr(Out.buffer, "LNK4044") != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       strstr(Err.buffer, "LNK4044") != NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static DWORD WINAPI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ReadFromPipe(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    LPVOID args)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pipeinfo *pi = (pipeinfo *) args;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *lastBuf = pi->buffer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    DWORD dwRead;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BOOL ok;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  again:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CloseHandle(pi->pipe);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return (DWORD)-1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (!ok || dwRead == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   CloseHandle(pi->pipe);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lastBuf += dwRead;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    goto again;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;  /* makes the compiler happy */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-IsIn(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *string,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *substring)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return (strstr(string, substring) != NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * GetVersionFromFile --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         Looks for a match string in a file and then returns the version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         following the match where a version is anything acceptable to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *         package provide or package ifneeded.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const char *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GetVersionFromFile(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *filename,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *match,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int numdots)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t cbBuffer = 100;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static char szBuffer[100];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *szResult = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    FILE *fp = fopen(filename, "rt");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (fp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Read data until we see our match string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   while (fgets(szBuffer, cbBuffer, fp) != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       LPSTR p, q;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       p = strstr(szBuffer, match);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       if (p != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            * Skip to first digit after the match.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           p += strlen(match);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (*p && !isdigit(*p)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ++p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            * Find ending whitespace.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           q = p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                       && (!strchr("ab", q[-1])) || --numdots))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               ++q;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           memcpy(szBuffer, p, q - p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           szBuffer[q-p] = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           szResult = szBuffer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   fclose(fp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return szResult;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * List helpers for the SubstituteFile function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-typedef struct list_item_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    struct list_item_t *nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char * key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char * value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} list_item_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* insert a list item into the list (list may be null) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static list_item_t *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list_item_t *itemPtr = malloc(sizeof(list_item_t));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (itemPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   itemPtr->key = strdup(key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   itemPtr->value = strdup(value);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   itemPtr->nextPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   while(*listPtrPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       listPtrPtr = &(*listPtrPtr)->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *listPtrPtr = itemPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return itemPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-list_free(list_item_t **listPtrPtr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (listPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   tmpPtr = listPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   listPtr = listPtr->nextPtr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   free(tmpPtr->key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   free(tmpPtr->value);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   free(tmpPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * SubstituteFile --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * As windows doesn't provide anything useful like sed and it's unreliable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * to use the tclsh you are building against (consider x-platform builds -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * eg compiling AMD64 target from IX86) we provide a simple substitution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * option here to handle autoconf style substitutions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The substitution file is whitespace and line delimited. The file should
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * consist of lines matching the regular expression:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   \s*\S+\s+\S*$
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Usage is something like:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   nmakehlp -S << $** > $@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        @PACKAGE_NAME@ $(PACKAGE_NAME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *        <<
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SubstituteFile(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *substitutions,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *filename)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t cbBuffer = 1024;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    static char szBuffer[1024], szCopy[1024];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *szResult = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    list_item_t *substPtr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    FILE *fp, *sp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fp = fopen(filename, "rt");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (fp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Build a list of substutitions from the first filename
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   sp = fopen(substitutions, "rt");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (sp != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       while (fgets(szBuffer, cbBuffer, sp) != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           unsigned char *ks, *ke, *vs, *ve;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ks = (unsigned char*)szBuffer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (ks && *ks && isspace(*ks)) ++ks;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ke = ks;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (ke && *ke && !isspace(*ke)) ++ke;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           vs = ke;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (vs && *vs && isspace(*vs)) ++vs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           ve = vs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           *ke = 0, *ve = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           list_insert(&substPtr, (char*)ks, (char*)vs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       fclose(sp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /* debug: dump the list */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifdef _DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       int n = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list_item_t *p = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Run the substitutions over each line of the input
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   while (fgets(szBuffer, cbBuffer, fp) != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       list_item_t *p = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for (p = substPtr; p != NULL; p = p->nextPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           char *m = strstr(szBuffer, p->key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (m) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               char *cp, *op, *sp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               cp = szCopy;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               op = szBuffer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               while (op != m) *cp++ = *op++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               sp = p->value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               while (sp && *sp) *cp++ = *sp++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               op += strlen(p->key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               while (*op) *cp++ = *op++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               *cp = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-               memcpy(szBuffer, szCopy, sizeof(szCopy));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       printf(szBuffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   list_free(&substPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fclose(fp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * QualifyPath --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This composes the current working directory with a provided path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * and returns the fully qualified and normalized path.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Mostly needed to setup paths for testing.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-QualifyPath(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *szPath)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char szCwd[MAX_PATH + 1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char szTmp[MAX_PATH + 1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char *p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    GetCurrentDirectory(MAX_PATH, szCwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while ((p = strchr(szPath, '/')) && *p)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   *p = '\\';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PathCombine(szTmp, szCwd, szPath);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    PathCanonicalize(szCwd, szTmp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("%s\n", szCwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Local variables:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   mode: c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   c-basic-offset: 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   fill-column: 78
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   indent-tabs-mode: t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *   tab-width: 8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * End:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/pkg.vc b/vendor/thread2.7.3/win/pkg.vc
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 4be861d91..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/pkg.vc
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,6 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# remember to change configure.ac as well when these change
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# (then re-autoconf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_MAJOR      = 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_MINOR      = 7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PACKAGE_VERSION    = "2.7.3"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/rules.vc b/vendor/thread2.7.3/win/rules.vc
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index f012a79f3..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/rules.vc
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,623 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# rules.vc --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  Microsoft Visual C++ makefile include for decoding the commandline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  macros.  This file does not need editing to build Tcl.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  This version is modified from the Tcl source version to support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  building extensions using nmake.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2001-2002 David Gravereaux.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2003-2008 Patrick Thoyts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef _RULES_VC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_RULES_VC = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cc32               = $(CC)   # built-in default.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-link32             = link
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-lib32              = lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rc32               = $(RC)   # built-in default.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef INSTALLDIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Assume the normal default.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_INSTALLDIR        = C:\Program Files\Tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Fix the path separators.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_INSTALLDIR        = $(INSTALLDIR:/=\)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Set the proper copy method to avoid overwrite questions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# to the user when copying files and selecting the right
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# "delete all" method.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(OS)" == "Windows_NT"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RMDIR      = rmdir /S /Q
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ERRNULL  = 2>NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![ver | find "4.0" > nul]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CPY        = echo y | xcopy /i >NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COPY       = copy >NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CPY        = xcopy /i /y >NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COPY       = copy /y >NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else # "$(OS)" != "Windows_NT"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CPY        = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COPY       = copy >_JUNK.OUT # On Win98 NUL does not work here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-RMDIR      = deltree /Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NULL    = \NUL # Used in testing directory existence
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ERRNULL = >NUL # Win9x shell cannot redirect stderr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MKDIR   = mkdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Determine the host and target architectures and compiler version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_HASH=^#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_VC_MANIFEST_EMBED_EXE=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_VC_MANIFEST_EMBED_DLL=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VCVER=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![echo VCVERSION=_MSC_VER > vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![echo ARCH=IX86 >> vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![echo ARCH=AMD64 >> vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![echo $(_HASH)endif >> vercl.x] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include vercl.i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![echo VCVER= ^\> vercl.vc] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include vercl.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NATIVE_ARCH=IX86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-NATIVE_ARCH=AMD64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Since MSVC8 we must deal with manifest resources.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(VCVERSION) >= 1400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef MACHINE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MACHINE=$(ARCH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef CFG_ENCODING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFG_ENCODING       = \"cp1252\"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message ===============================================================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# build the helper app we need to overcome nmake's limiting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# environment.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist(nmakehlp.exe)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Test for compiler features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### test for optimizations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -Ot]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler has 'Optimizations'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZING = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler does not have 'Optimizations'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZING = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS   =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -Ot]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -Oi]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -Op]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -fp:strict]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -Gs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -GS]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -GL]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUGFLAGS     =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -RTC1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!elseif [nmakehlp -c -GZ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPILERFLAGS  =-W3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# In v13 -GL and -YX are incompatible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -YX]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if ![nmakehlp -c -GL]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "IX86"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### test for pentium errata
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -QI0f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler has 'Pentium 0x0f fix'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler does not have 'Pentium 0x0f fix'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "IA64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### test for Itanium errata
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -c -QIA64_Bx]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler has 'B-stepping errata workarounds'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler does not have 'B-stepping errata workarounds'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "IX86"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### test for -align:4096, when align:512 will do.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -l -opt:nowin98]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Linker has 'Win98 alignment problem'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ALIGN98_HACK       = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Linker does not have 'Win98 alignment problem'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ALIGN98_HACK       = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ALIGN98_HACK       = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LINKERFLAGS     =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -l -ltcg]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LINKERFLAGS     =-ltcg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Decode the options requested.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STATIC_BUILD       = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_THREADS        = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUG              = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PROFILE            = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSVCRT             = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LOIMPACT   = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_USE_STATIC_PACKAGES    = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_ALLOC = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_STORAGE = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-UNCHECKED       = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "static"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing static
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STATIC_BUILD       = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-STATIC_BUILD       = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "msvcrt"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing msvcrt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSVCRT             = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSVCRT             = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "staticpkg"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing staticpkg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_USE_STATIC_PACKAGES    = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_USE_STATIC_PACKAGES    = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "nothreads"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compile explicitly for non-threaded tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_THREADS        = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_THREADS     = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "symbols"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing symbols
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUG              = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-DEBUG              = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "profile"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing profile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PROFILE            = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PROFILE            = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "loimpact"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing loimpact
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LOIMPACT   = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LOIMPACT   = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "thrdalloc"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing thrdalloc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_ALLOC = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_ALLOC = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "thrdstorage"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing thrdstorage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_STORAGE = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-USE_THREAD_STORAGE = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(OPTS) "unchecked"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing unchecked
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-UNCHECKED = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-UNCHECKED = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Make sure we don't build overly fat DLLs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSVCRT             = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We shouldn't statically put the extensions inside the shell when dynamic.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_USE_STATIC_PACKAGES = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Figure-out how to name our intermediate and output directories.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# We wouldn't want different builds to use the same .obj files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# by accident.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Naming convention:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   t = full thread support.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   s = static library (as opposed to an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  import library)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   g = linked to the debug enabled C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  run-time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   x = special static build when it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#  links to the dynamic C run-time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = sgx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDIRTOP = Debug
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDIRTOP = Release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" != "IX86"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(VCVER) > 6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = $(SUFX:g=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = $(TMP_DIRFULL:Static=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = $(SUFX:s=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EXT            = dll
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(MSVCRT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = $(TMP_DIRFULL:X=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = $(SUFX:x=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-EXT            = lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(MSVCRT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = $(TMP_DIRFULL:X=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = $(SUFX:x=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !$(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SUFX           = $(SUFX:t=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef TMP_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TMP_DIR        = $(TMP_DIRFULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef OUT_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OUT_DIR        = .\$(BUILDDIRTOP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifndef OUT_DIR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OUT_DIR        = $(TMP_DIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Decode the statistics requested.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_MEM_DEBUG          = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_COMPILE_DEBUG   = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(STATS) "memdbg"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing memdbg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_MEM_DEBUG          = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_MEM_DEBUG          = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(STATS) "compdbg"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing compdbg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_COMPILE_DEBUG   = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_COMPILE_DEBUG   = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Decode the checks requested.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_NO_DEPRECATED      = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WARNINGS               = -W3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(CHECKS) "nodep"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing nodep check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_NO_DEPRECATED      = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_NO_DEPRECATED      = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(CHECKS) "fullwarn"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing full warnings check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WARNINGS               = -W4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -l -warn:3]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LINKERFLAGS                    = $(LINKERFLAGS) -warn:3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WARNINGS               = -W3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Doing 64bit portability warnings
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WARNINGS               = $(WARNINGS) -Wp64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Set our defines now armed with our options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCL_MEM_DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_MEM_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCL_COMPILE_DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(USE_THREAD_ALLOC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(USE_THREAD_STORAGE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_STORAGE=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(STATIC_BUILD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCL_NO_DEPRECATED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_NO_DEPRECATED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(DEBUG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!elseif $(OPTIMIZING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(PROFILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_PROFILED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Get common info used when building extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(PROJECT)" != "tcl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If INSTALLDIR set to tcl root dir then reset to the lib dir.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_INSTALLDIR)\include\tcl.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_INSTALLDIR=$(_INSTALLDIR)\lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !defined(TCLDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_INSTALLDIR)\..\include\tcl.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLINSTALL = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TCLDIR            = $(_INSTALLDIR)\..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLDIR          = $(_INSTALLDIR)\..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSG=^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Failed to find tcl.h.  Set the TCLDIR macro.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!error $(MSG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TCLDIR    = $(TCLDIR:/=\)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_TCLDIR)\include\tcl.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLINSTALL = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TCL_H          = $(_TCLDIR)\include\tcl.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!elseif exist("$(_TCLDIR)\generic\tcl.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLINSTALL = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TCL_H          = $(_TCLDIR)\generic\tcl.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSG =^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Failed to find tcl.h.  The TCLDIR macro does not appear correct.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!error $(MSG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [echo REM = This file is generated from rules.vc > version.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_TCL_H)")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [echo TCL_DOTVERSION = \>> version.vc] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   && [nmakehlp -V "$(_TCL_H)" TCL_VERSION >> version.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include version.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_VERSION        = $(TCL_DOTVERSION:.=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TCLINSTALL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH              = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist($(TCLSH)) && $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH           = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSTUBLIB = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLIMPLIB  = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_LIBRARY        = $(_TCLDIR)\lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_INCLUDES    = -I"$(_TCLDIR)\include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH              = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist($(TCLSH)) && $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSH              = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLSTUBLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCLIMPLIB  = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_LIBRARY        = $(_TCLDIR)\library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TCL_INCLUDES       = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Optionally check for Tk info for building extensions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ifdef PROJECT_REQUIRES_TK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !defined(TKDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_INSTALLDIR)\..\include\tk.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKINSTALL      = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TKDIR         = $(_INSTALLDIR)\..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TK_H          = $(_TKDIR)\include\tk.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKDIR          = $(_TKDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!elseif exist("$(_TCLDIR)\include\tk.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKINSTALL      = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TKDIR         = $(_TCLDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TK_H          = $(_TKDIR)\include\tk.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKDIR          = $(_TKDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TKDIR = $(TKDIR:/=\)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_TKDIR)\include\tk.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKINSTALL      = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TK_H          = $(_TKDIR)\include\tk.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!elseif exist("$(_TKDIR)\generic\tk.h")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKINSTALL      = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-_TK_H          = $(_TKDIR)\generic\tk.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-MSG =^
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Failed to find tk.h. The TKDIR macro does not appear correct.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!error $(MSG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if defined(TKDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_DOTVERSION = 8.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if exist("$(_TK_H)")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [echo TK_DOTVERSION = \>> version.vc] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   && [nmakehlp -V "$(_TK_H)" TK_VERSION >> version.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include version.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_VERSION = $(TK_DOTVERSION:.=)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if $(TKINSTALL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WISH               = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist($(WISH)) && $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WISH               = "$(_TKDIR)\bin\wish$(TK_VERSION)t$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKSTUBLIB  = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKIMPLIB   = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_INCLUDES     = -I"$(_TKDIR)\include"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_LIBRARY = $(_TKDIR)\lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WISH               = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if !exist($(WISH)) && $(TCL_THREADS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-WISH               = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)t$(SUFX).exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKSTUBLIB  = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TKIMPLIB   = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-TK_LIBRARY = $(_TKDIR)\library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!if [echo OUT_DIR_PATH = \>> version.vc] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    && [nmakehlp -Q "$(OUT_DIR)" >> version.vc]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!include version.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Display stats being used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#----------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Intermediate directory will be '$(TMP_DIR)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Output directory will be '$(OUT_DIR)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Suffix for binaries will be '$(SUFX)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Optional defines are '$(OPTDEFINES)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!message *** Link options '$(LINKERFLAGS)'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/thread.rc b/vendor/thread2.7.3/win/thread.rc
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c5ca3afc7..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/thread.rc
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,46 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-// Version resource script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <winver.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define RESOURCE_INCLUDED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <tcl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LANGUAGE 0x9, 0x1    /* LANG_ENGLISH, SUBLANG_DEFAULT */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VS_VERSION_INFO VERSIONINFO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILEVERSION    PACKAGE_MAJOR,PACKAGE_MINOR,0,0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PRODUCTVERSION PACKAGE_MAJOR,PACKAGE_MINOR,0,0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILEFLAGSMASK  0x3fL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILEFLAGS 0x1L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILEFLAGS 0x0L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILEOS     0x4    /* VOS__WINDOWS32 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILETYPE     0x2    /* VFT_DLL */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- FILESUBTYPE     0x0L
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BEGIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BLOCK "StringFileInfo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BEGIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        BLOCK "040904b0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        BEGIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "FileDescription", "Threading extension library for Tcl\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if DEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "OriginalFilename", "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) "d.dll\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "OriginalFilename", "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) ".dll\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "CompanyName", "NONE! Open-sourced with no owner\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "FileVersion", PACKAGE_VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "LegalCopyright", "Under BSD license\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "ProductName", "Tcl for Windows\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "ProductVersion", PACKAGE_VERSION
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            VALUE "Authors", "Brent Welch,\r\n" "Andreas Kupries, \r\n" "David Gravereaux,\r\n" "Zoran Vasiljevic" "\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        END
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    END
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BLOCK "VarFileInfo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    BEGIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        VALUE "Translation", 0x409, 1200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    END
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-END
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/threadWin.c b/vendor/thread2.7.3/win/threadWin.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c77ff9ce7..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/threadWin.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,54 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * threadWin.c --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Windows specific aspects for the thread extension.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * see http://dev.activestate.com/doc/howto/thread_model.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Some of this code is based on work done by Richard Hipp on behalf of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Conservation Through Innovation, Limited, with their permission.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1998 by Sun Microsystems, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 1999,2000 by Scriptics Corporation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * See the file "license.terms" for information on usage and redistribution
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include "../generic/tclThread.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <windows.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <process.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* only Windows 2000 (XP, too??) has this function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-HANDLE (WINAPI *winOpenThreadProc)(DWORD, BOOL, DWORD);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadpInit (void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HMODULE hKernel = GetModuleHandle("kernel32.dll");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    winOpenThreadProc = (HANDLE (WINAPI *)(DWORD, BOOL, DWORD))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       GetProcAddress(hKernel, "OpenThread");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ThreadpKill (Tcl_Interp *interp, long id)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    HANDLE hThread;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int result = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (winOpenThreadProc) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   hThread = winOpenThreadProc(THREAD_TERMINATE, FALSE, id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * not to be misunderstood as "devilishly clever",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * but evil in it's pure form.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   TerminateThread(hThread, 666);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           "Can't (yet) kill threads on this OS, sorry.", NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/thread_win.dsp b/vendor/thread2.7.3/win/thread_win.dsp
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 7d0888332..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/thread_win.dsp
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,275 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Microsoft Developer Studio Project File - Name="thread" - Package Owner=<4>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Microsoft Developer Studio Generated Build File, Format Version 6.00
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ** DO NOT EDIT **
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# TARGTYPE "Win32 (x86) External Target" 0x0106
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-CFG=thread - Win32 Debug
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE use the Export Makefile command and run
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE NMAKE /f "thread_win.mak".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE You can specify a configuration when running NMAKE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE by defining the macro CFG on the command line. For example:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE NMAKE /f "thread_win.mak" CFG="thread - Win32 Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE Possible choices for configuration are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE "thread - Win32 Release" (based on "Win32 (x86) External Target")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE "thread - Win32 Debug" (based on "Win32 (x86) External Target")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!MESSAGE 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Project
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP AllowPerConfigDependencies 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Scc_ProjName ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Scc_LocalPath ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!IF  "$(CFG)" == "thread - Win32 Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Use_MFC 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Use_Debug_Libraries 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Output_Dir "Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Intermediate_Dir "Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Cmd_Line "NMAKE /f thread.mak"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Rebuild_Opt "/a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Target_File "thread.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Bsc_Name "thread.bsc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Target_Dir ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Use_MFC 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Use_Debug_Libraries 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Output_Dir "Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Intermediate_Dir "Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Cmd_Line "nmake -nologo -f makefile.vc TCLDIR=E:\tcl MSVCDIR=IDE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Rebuild_Opt "-a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Target_File "Release\thread27.dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Bsc_Name ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Target_Dir ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ELSEIF  "$(CFG)" == "thread - Win32 Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Use_MFC 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Use_Debug_Libraries 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Output_Dir "Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Intermediate_Dir "Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Cmd_Line "NMAKE /f thread.mak"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Rebuild_Opt "/a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Target_File "thread.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Bsc_Name "thread.bsc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP BASE Target_Dir ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Use_MFC 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Use_Debug_Libraries 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Output_Dir "Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Intermediate_Dir "Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Cmd_Line "nmake -nologo -f makefile.vc OPTS=symbols TCLDIR=E:\tcl MSVCDIR=IDE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Rebuild_Opt "-a"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Target_File "Debug\thread27d.dll"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Bsc_Name ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Target_Dir ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ENDIF 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Name "thread - Win32 Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Name "thread - Win32 Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!IF  "$(CFG)" == "thread - Win32 Release"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ELSEIF  "$(CFG)" == "thread - Win32 Debug"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-!ENDIF 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ROOT=..
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "generic"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadNs.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\psGdbm.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\psGdbm.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\tclThread.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\tclThreadInt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\tclXkeylist.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\tclXkeylist.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadPoolCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSpCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvKeylistCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvKeylistCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvListCmd.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\generic\threadSvListCmd.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "doc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "html"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\html\thread.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\html\tpool.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\html\tsv.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\html\ttrace.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "man"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\man\thread.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\man\tpool.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\man\tsv.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\man\ttrace.n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\format.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\man.macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\thread.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\tpool.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\tsv.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\doc\ttrace.man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "win"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Group "vc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# PROP Default_Filter ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=.\makefile.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=.\nmakehlp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=.\pkg.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=.\README.vc.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=.\rules.vc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\win\README.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\win\thread.rc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\win\threadWin.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Group
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\ChangeLog
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\license.terms
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Begin Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-SOURCE=$(ROOT)\README
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Source File
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Target
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# End Project
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/vendor/thread2.7.3/win/thread_win.dsw b/vendor/thread2.7.3/win/thread_win.dsw
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 980477f8e..000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/vendor/thread2.7.3/win/thread_win.dsw
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,29 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Microsoft Developer Studio Workspace File, Format Version 6.00
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###############################################################################
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Project: "thread"=.\thread.dsp - Package Owner=<4>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Package=<5>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{{{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Package=<4>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{{{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###############################################################################
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Global:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Package=<5>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{{{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Package=<3>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{{{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###############################################################################
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span></pre><pre style='margin:0'>

</pre>