<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 "Tcl Threading"</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> <a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#commands">COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <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> </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 ; # <-- 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> </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 "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;'>-<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;'>-"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;'>-<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> </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 "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;'>-</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 "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;'>-<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> </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> </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> </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 {<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;'>-</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 "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;'>-<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 "Tcl Threading"</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> <a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#commands">COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <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 "Tcl Threading"</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> <a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#element_commands">ELEMENT COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#list_commands">LIST COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#array_commands">ARRAY COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#keyed_list_commands">KEYED LIST COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#credits">CREDITS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <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> </td><td><pre class='sample'>
</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;'>-</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> </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 <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;'>-<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> </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> </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 "Tcl Threading"</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> <a href="#table_of_contents">TABLE OF CONTENTS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#synopsis">SYNOPSIS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#description">DESCRIPTION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#user_commands">USER COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#callback_commands">CALLBACK COMMANDS</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#discussion">DISCUSSION</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a href="#see_also">SEE ALSO</a><br>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <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> </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>